iOS - Parse.com PFRelation для добавления друзей добавляет только отношения для текущего пользователя, а не для добавляемого друга
Мое приложение имеет контроллер представления, где пользователь может добавлять друзей. Приложение обращается к адресной книге пользователя и обращается к внутреннему серверу Parse.com, чтобы узнать, использует ли приложение какие-либо контакты из адресной книги. Если они найдены, я помещаю объекты PFO для этих пользователей в строки моего UITableView.
Каждая строка в таблице имеет кнопку. Если пользователь нажимает кнопку строки, то выполняется следующий код, который создает объект PFRelation с именем friendsRelation и добавляет PFObject конкретной строки, которая была нажата:
PFRelation *friendsRelation = [self.currentUser relationforKey:@"friendsRelation"];
PFUser *user = [self.allUsersInParse objectAtIndex:indexPath.row];
[friendsRelation addObject:user];
[self.currentUser saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
if(error) {
NSLog(@"%@ %@", error, [error userInfo]);
}
}];
Это все прекрасно работает по большей части. Если я проверю строку текущего пользователя в Parse и нажму на кнопку "Просмотреть отношения" в столбце / ключе их friendsRelation, он отобразит правильную информацию о пользователе, которую он только что добавил.
Однако, если я вернусь к основному классу _User и найду строку для друга, которая была добавлена текущим пользователем, и нажму на кнопку "Просмотреть отношения" в столбце / ключе "FriendsRelation", он не содержит данных пользователя. для текущего пользователя, который только что добавил их.
Таким образом, если вы добавите кого-то в свой список друзей, он будет хорошо отображаться в вашем списке друзей, но если ваш новый друг заходит и просматривает список друзей, вас там вообще не будет.
Я попытался создать исправление, добавив дополнительный код PFRelation для пользователя, добавляемого текущим пользователем. Смотрите user2:
PFRelation *friendsRelation = [self.currentUser relationforKey:@"friendsRelation"];
PFUser *user = [self.allUsersInParse objectAtIndex:indexPath.row];
NSLog(@"USER CONTENTS ON BUTTON PRESS: %@", user);
[friendsRelation addObject:user];
[self.currentUser saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
if(error) {
NSLog(@"%@ %@", error, [error userInfo]);
}
PFUser *user2 = [self.allUsersInParse objectAtIndex:indexPath.row];
PFRelation *friendsRelation2 = [user2 relationforKey:@"friendsRelation"];
[friendsRelation2 addObject:self.currentUser];
[user2 saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error2) {
if(error2) {
NSLog(@"%@ %@", error2, [error2 userInfo]);
}
}];
Этот код технически корректен, но теперь он разрешен. Parse выводит на консоль сообщение об ошибке и в основном говорит, что вы не можете добавить PFRelation для пользователя, который не прошел аутентификацию при входе в систему или регистрации.
У кого-нибудь есть идеи, как я могу заставить это работать?
Единственное, о чем я подумал, это то, что когда добавленный друг входит в приложение, я могу запросить Parse для любых объектов friendsRelation в базе данных, которые содержат их objectId, и, если они найдены, я могу создать новый PFRelation для текущего вошел в систему пользователя.
Но для этого потребуется сканировать всю базу данных, и это кажется неэффективным исправлением, которое в будущем будет медленным по мере роста базы данных.
Спасибо за помощь.
1 ответ
Если вам нужно изменить данные любого пользователя, который не является текущим пользователем, вам следует использовать функцию CodeCloud с Parse.Cloud.useMasterKey(); этот путь обойдет все ACL.