2014-07-02 24 views
0

保存用戶造成錯誤:沒有找到對象的更新(代碼:101,版本:1.2.19)保存用戶的原因沒有找到對象錯誤

[PFGeoPoint geoPointForCurrentLocationInBackground:^(PFGeoPoint *geoPoint, NSError *error) { 
     if (!error) { 
      [PFUser currentUser].location = geoPoint; 
      [[PFUser currentUser] save]; 
     } 
    }]; 

我究竟做錯了什麼?

HTTP POST請求https://api.parse.com/2/update

{ 
    "iid": "[redacted]", 
    "classname": "_User", 
    "data": { 
     "email": "[email protected]", 
     "objectId": "[redacted]" 
    }, 
    "session_token": "[redacted]", 
    "v": "i1.2.19", 
    "uuid": "[redacted]" 
} 

響應

{ 
    "code": 101, 
    "error": "object not found for update" 
} 

回答

1

我有同樣的問題,因爲你,我做了一些測試,找出根本原因:

  • 創建新類GameScore作爲document
  • 做同樣的創建和更新對象,並查找它運作良好
  • 檢查「ACL」列並與您的問題數據進行比較。看到?

Works ACL, I done modify for * to make it clear
工程ACL,我做了修改*要清楚

enter image description here
失敗ACL。

正如你可以看到寫權限鎖定用戶「6iIv5XWZvM」,這就是爲什麼你的更新將「找不到對象」

您可以直接更改數據記錄爲「*」,讓你更新效果很好。

好的!這裏是解決方案如下:

  1. 更改每個記錄 「ACL」 數據欄如下:

    { 「*」:{ 「寫」:真實的, 「讀」:真正}}

  2. 您需要登錄PFUSer作爲特定用戶才能將ACL更改爲公開。對於我的情況使用objectId將是「6iIv5XWZvM」。我需要設置密碼和登錄信息並使用代碼來登錄和修改它。詳細iOS的代碼如下:

    //iOS Sample 
    [PFUser logInWithUsernameInBackground:@"USERNAME" password:@"PASSWORD" block:^(PFUser *user, NSError *error) { 
        if (user) { 
         PFQuery *query = [PFQuery queryWithClassName:CLASS_NAME]; 
         [query findObjectsInBackgroundWithBlock:^(NSArray *objs, NSError *error) { 
          for (PFObject *obj in objs) { 
           PFACL *defaultACL = [PFACL ACL]; 
           [defaultACL setPublicReadAccess:YES]; 
           [defaultACL setPublicWriteAccess:YES]; 
           [obj setACL:defaultACL]; 
           [obj saveInBackground]; 
          } 
         }]; 
        } else { 
         // The login failed. Check error to see why. 
         } 
    }]; 
    

但是記得添加下面的設置保存新數據之前,如果你不希望再發生了(注:這將是安全問題)

//It is iOS code sample. 
PFACL *defaultACL = [PFACL ACL]; 
[defaultACL setPublicReadAccess:YES]; 
[defaultACL setPublicWriteAccess:YES]; 
[PFACL setDefaultACL:defaultACL withAccessForCurrentUser:YES]; 
0

試試這個,我用這個,當我需要保存的對象爲當前用戶。希望它會有所幫助。

 PFUser *user = [PFUser currentUser]; 
     [user setObject:geoPoint forKey:@"location"]; 

     [user saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { 
      if (error){ 
       NSLog(@"Error %@ %@", error, [error userInfo]); 
      } 
     }]; 
+0

獲得與保存在背景方法中一樣的錯誤。 – MonkeyBonkey

0

錯誤:「嘗試對保存用戶沒有訪問ACL的對象」時,找不到更新對象「。

爲了讓用戶改變你需要設置PFACL許可對象時創建對象:

對於一個特定的用戶:

PFObject *object = /*the object you want to save*/ 
NSString *userID = /*the objectID of the user you want to let perform modifications later*/ 
PFACL *groupACL = [PFACL ACL]; 
[groupACL setWriteAccess:YES forUserId:userID]; 
object.ACL = groupACL; 

對於所有用戶:

PFObject *object = /*the object you want to save*/ 
NSString *userID = /*the objectID of the user you want to let perform modifications later*/ 
PFACL *groupACL = [PFACL ACL]; 
[groupACL setPublicWriteAccess:YES]; 
object.ACL = groupACL; 
相關問題