[英]iOS - Parse.com PFRelation for adding friends only adds the relationship for current user, not for the friend being added
我的應用有一個視圖控制器,用戶可以在其中添加好友。 該應用程序訪問用戶的地址簿,並調用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代碼來創建修復。 見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中包含其objectId的數據庫中的任何friendsRelation對象,如果找到任何對象,那么我可以為當前創建新的PFRelation登錄用戶。
但這將需要掃描整個數據庫,看起來像一個低效的修復程序,隨着數據庫的增長將來會很慢。
謝謝您的幫助。
如果您需要修改任何不是當前用戶的用戶的數據,您應該使用CodeCloud函數和Parse.Cloud.useMasterKey(); 這種方式將繞過所有ACL。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.