【问题标题】:iOS - Parse.com PFRelation for adding friends only adds the relationship for current user, not for the friend being addediOS - Parse.com 添加好友的 PFRelation 仅添加当前用户的关系,而不是添加的好友
【发布时间】:2023-03-12 04:43:01
【问题描述】:

我的应用有一个视图控制器,用户可以在其中添加朋友。该应用程序访问用户的通讯录,并调用 Parse.com 后端服务器以查看是否有任何通讯录联系人已在使用该应用程序。如果找到,那么我将这些用户的 PFObjects 放在我的 UITableView 的行中。

表格中的每一行都有一个按钮。如果用户按下一行的按钮,则执行以下代码,创建一个名为 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 列/键中的“查看关系”按钮,它将显示他们刚刚添加的正确用户的信息。

但是,如果我回到主 _User 类,找到当前用户添加的朋友所在的行,然后在他们的 friendsRelation 列/键中单击他们的“查看关系”按钮,它不包含刚刚添加它们的当前用户的用户数据。

因此,基本上,如果您将某人添加到您的朋友列表中,他们会很好地显示在您的朋友列表中,但如果您的新朋友去查看他们的朋友列表,您根本不会出现在那里。

我尝试通过为当前用户添加的用户添加额外的 PFRelation 代码来创建修复程序。见用户2:

  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 中查询数据库中包含他们的 objectId 的任何 friendsRelation 对象,如果找到的话,我可以创建一个新的 PFRelation对于当前登录的用户。

但这需要扫描整个数据库,而且似乎是一种效率低下的修复方法,将来随着数据库的增长会变慢。

感谢您的帮助。

【问题讨论】:

  • 正如我在您的其他问题中所建议的,您应该将这些关系放在其他表中。每次有人关注另一个用户时都需要更新用户记录,这不是一个好主意。

标签: ios iphone objective-c parse-platform pfrelation


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-02-17
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    • 2020-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多