iOS – Parse.com用于添加朋友的PFRelation仅添加当前用户的关系,而不是添加的朋友

我的应用程序有一个视图控制器,用户可以添加好友。 该应用程序访问用户的地址簿,并调用Parse.com后端服务器,看看是否有任何地址簿联系人已经在使用该应用程序。 如果find任何,那么我把这些用户的PFObjects放在我的UITableView的行中。

表中的每一行都有一个button。 如果用户按下一行的button,则执行以下代码,该代码创build一个名为friendsRelation的PFRelation对象,并添加已被点击的特定行的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列/键中的“View Relations”button,它将显示刚添加的用户信息。

但是,如果我回到主_User类,并find当前用户添加的朋友的行,并单击他们的friendsRelation列/键中的“View Relations”button,它不包含用户数据为刚刚添加它们的当前用户。

所以基本上,如果你添加一个人到你的朋友列表,他们会出现在你的朋友列表中,但是如果你的新朋友去看他们的朋友列表,你将不会在那里。

我试图通过为当前用户添加的用户添加额外的PFRelation代码来创build一个修复程序。 请参阅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]); } }]; 

这个代码在技术上是正确的,但现在是允许的。 parsing打印错误的控制台,基本上说,你不能为未通过login或注册身份validation的用户添加PFRelation。

有没有人有任何想法,我怎么能做到这一点?

我唯一想到的是,当添加的朋友login到应用程序,我可以查询Parse的数据库中的任何friendsRelation对象包含它们的objectId,如果有任何被发现,那么我可以为当前创build一个新的PFRelationlogin用户。

但是,这将需要扫描整个数据库,并且看起来像是一个效率低下的问题,随着数据库的增长,将来会变得很慢。

谢谢您的帮助。

如果您需要修改不是当前用户的任何用户的数据,则应使用带有Parse.Cloud.useMasterKey()的CodeCloud函数; 这种方式将绕过所有ACL。