iOS Parse好友系统:双PFUser查询后如何更新请求状态?
嘿,我来帮你搞定这个好友请求状态更新的问题!首先得假设你应该有一个专门存储好友请求的Parse类(比如命名为FriendRequest),里面至少包含这几个字段:
fromUser:PFUser类型,存储发送请求的用户toUser:PFUser类型,存储接收请求的用户status:NSString类型,标记请求状态(比如"pending"表示请求中,"accepted"表示已确认)
接下来是具体的实现步骤和代码:
1. 查询对应的好友请求对象
首先你需要精准定位到那条待确认的请求,也就是发送方是user1、接收方是当前用户、状态为"pending"的记录:
PFUser *currentUser = [PFUser currentUser]; PFQuery *query = [PFQuery queryWithClassName:@"FriendRequest"]; [query whereKey:@"fromUser" equalTo:user1]; [query whereKey:@"toUser" equalTo:currentUser]; [query whereKey:@"status" equalTo:@"pending"]; // 执行异步查询,避免阻塞主线程 [query getFirstObjectInBackgroundWithBlock:^(PFObject * _Nullable request, NSError * _Nullable error) { if (!error && request) { // 2. 更新请求状态为已确认 [request setObject:@"accepted" forKey:@"status"]; [request saveInBackgroundWithBlock:^(BOOL succeeded, NSError * _Nullable error) { if (succeeded) { NSLog(@"好友请求已成功确认!"); // 这里可以添加UI刷新逻辑,比如更新好友列表、移除请求提示等 dispatch_async(dispatch_get_main_queue(), ^{ // 主线程更新UI的代码写在这里 }); } else { NSLog(@"确认失败:%@", error.localizedDescription); } }]; } else { NSLog(@"未找到对应的好友请求或查询出错:%@", error.localizedDescription); } }];
2. 额外优化:双向添加好友关系(可选但推荐)
如果你的应用需要快速查询用户的好友列表,建议在确认请求后,给两个用户的friends数组字段(如果没有可以新建)互相添加对方的引用:
// 在请求保存成功的block里添加这段代码 if (succeeded) { NSLog(@"好友请求已成功确认!"); // 更新当前用户的好友列表 [currentUser addObject:user1 forKey:@"friends"]; [currentUser saveInBackground]; // 更新对方用户的好友列表 [user1 addObject:currentUser forKey:@"friends"]; [user1 saveInBackground]; // 主线程更新UI dispatch_async(dispatch_get_main_queue(), ^{ // 比如刷新好友列表页面 }); }
关键注意事项
- ACL权限设置:确保
FriendRequest类的ACL只允许fromUser和toUser修改对应的请求记录,避免其他用户恶意篡改。可以在创建请求时设置:PFACL *acl = [PFACL ACLWithUser:fromUser]; [acl setReadAccess:YES forUser:toUser]; [acl setWriteAccess:YES forUser:toUser]; [request setACL:acl]; - 错误处理:一定要处理查询和保存过程中的错误,比如网络问题、权限不足等,给用户友好的提示。
- 线程安全:所有UI更新操作必须放在主队列执行,避免界面卡顿或崩溃。
内容的提问来源于stack exchange,提问作者Harris Zhang
相关产品推荐
相关产品推荐

