2013-10-22 52 views
0

我創建一個新的PFObject,就可以設置一些對象,然後保存它,像這樣:Parse.com - 錯誤101保存時,新PFObject

// Add a new 'madeTitle' Activity Object 
PFObject* madeTitleActivity = [PFObject objectWithClassName:kPAPActivityClassKey]; 
[madeTitleActivity setObject:aComment forKey:kWSActivityCommentKey]; 
[madeTitleActivity setObject:self.photo forKey:kPAPActivityPhotoKey]; 
[madeTitleActivity setObject:[PFUser currentUser] forKey:kPAPActivityFromUserKey]; 
[madeTitleActivity setObject:[aComment objectForKey:kWSCommentsFromUserKey] forKey:kPAPActivityToUserKey]; 
[madeTitleActivity setObject:kPAPActivityTypeMadeTitle forKey:kPAPActivityTypeKey]; 

// ACL's 
PFACL *ACL = [PFACL ACLWithUser:[PFUser currentUser]]; 
[ACL setPublicReadAccess:YES]; 
[ACL setWriteAccess:YES forUser:[PFUser currentUser]]; 
madeTitleActivity.ACL = ACL; 


[madeTitleActivity saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { 

    if (succeeded) { 
     // ... 
    } 
    else { 
     NSLog(@"madeTitleActivity saveInBackgroundWithBlock -- error = %@", error); 
    } 
}]; 

但我發現了以下錯誤:

2013-10-22 10:55:12.546 WSPhoto[2064:7b4b] Error: object not found for update (Code: 101, Version: 1.2.6) 
2013-10-22 10:55:12.552 WSPhoto[2064:707] madeTitleActivity saveInBackgroundWithBlock -- error = Error Domain=Parse Code=101 "The operation couldn’t be completed. (Parse error 101.)" UserInfo=0x8966c0 {code=101, error=object not found for update} 

我已經處理過錯誤,但它一直在更新對象和ACL問題。創建和保存新對象時,我沒有這個錯誤代碼。

我檢查了所有設置的對象,它們都返回有效的對象。

我也成功地保存了一些其他的Activity對象,並從我可以告訴代碼看起來完全一樣。


編輯:擴展的代碼包括CloudCode函數調用的madeTitleActivity代碼嵌套在

[PFCloud callFunctionInBackground:@"setCommentIsTitle" 
        withParameters:@{@"userID":[[PFUser currentUser] objectId], 
        @"objectId":[aComment objectId], 
        @"photoObjectId":[self.photo objectId], 
        @"previousCommentObjectId":[previousTitleComment objectId], 
        @"isTitle":[NSNumber numberWithBool:YES], 
        @"previousCommentObjectIsTitle":[NSNumber numberWithBool:NO]} 
           block:^(NSMutableDictionary *results , NSError *error) { 

    if (!error) { 
     // Add a new 'madeTitle' Activity Object 
     PFObject* madeTitleActivity = [PFObject objectWithClassName:kPAPActivityClassKey]; 
     [madeTitleActivity setObject:aComment forKey:kWSActivityCommentKey]; 
     [madeTitleActivity setObject:self.photo forKey:kPAPActivityPhotoKey]; 
     [madeTitleActivity setObject:[PFUser currentUser] forKey:kPAPActivityFromUserKey]; 
     [madeTitleActivity setObject:[aComment objectForKey:kWSCommentsFromUserKey] forKey:kPAPActivityToUserKey]; 
     [madeTitleActivity setObject:kPAPActivityTypeMadeTitle forKey:kPAPActivityTypeKey]; 

     // ACL's 
     PFACL *madeTitleACL = [PFACL ACLWithUser:[PFUser currentUser]]; 
     [madeTitleACL setPublicReadAccess:YES]; 
     [madeTitleACL setWriteAccess:YES forUser:[PFUser currentUser]]; 
     madeTitleActivity.ACL = madeTitleACL; 

     [madeTitleActivity saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { 

      NSLog(@"madeTitleActivity saveInBackgroundWithBlock -- called"); 

      if (succeeded) { 
       // .. 
      } 
      else { 
       NSLog(@"madeTitleActivity saveInBackgroundWithBlock -- error = %@", error); 
      } 
     }]; 
    } 

    else { 
     NSLog(@"etCommentIsTitle PFCloud -- error = %@", error); 
    } 
}]; 
+0

'aComment'和'photo'是什麼? – Wain

+0

aComment是一個現有的PFObject,與照片一樣。 – Ramsel

回答

1

此:

Error: object not found for update

意味着你要保存的對象與關係到尚未保存的某個其他對象。你不能這樣做,因爲它不存在。

你需要找出它的其他對象,並確保它首先被保存。


注意,您可以使用的saveAll...方法之一批量保存了一些新的對象,並且兩個避免這種問題,並得到了一些提高效率。

+0

這聽起來是正確的,不幸的是,現在我記得我之前一直在走這條路。稍後再測試 - 我需要一些太陽=)。 – Ramsel

+0

所以我已經包含了我應該包含的東西,包含嵌套的madeTitleActivity代碼的雲代碼函數......我把madeTitleActivity代碼從這裏放到了之前,現在它保存得很好.. 。因此,我假設它是你的建議,並有一個評論和self.photo是骯髒的問題......但是,madeTitleActivity是在雲代碼函數的CALLBACK,所以不會aComment和self.photo是在那個點保存? – Ramsel

+0

我認爲他們應該存在雲代碼才能正常工作,是的。我明白,錯誤意味着對象不存在於服務器上,而不是該對象的本地版本是髒的。 – Wain

0

它涉及到ACL,請檢查您的儀表盤的數據列「ACL」

寫應該鎖定在特定的用戶ID。你需要它從你的儀表盤更改爲更新其權限

{"*":{"write":true,"read":true}} 

可以在this

1

也提醒檢查我的答覆更詳細不要試圖試圖挽救一個新的對象時設置的ObjectId。這通常不是一個問題,除非你不小心吹走你的分貝,並試圖推回它。