2014-07-10 49 views
1

場景=我有一個PFQueryTableViewController,它將顯示用戶發送給對方的消息。爲了創建對話之間的關係,我將一個字符串保存到名爲「messageID」的對象中。我希望「messageID」成爲第一個消息的「objectId」的精確副本,以便按時間順序進行對話,並且將從「createdAt」邊界'orderByAscending'。解析iOS SDK:如何在創建PFObject時複製objectId

問題=如何從第一條消息設置(複製)「objectId」?

我試圖做的想法是這樣的......

PFObject *message = [PFObject objectWithClassName:@"Message"]; 
[message setObject:[NSString stringWithFormat:@"%@", self.messageTextView.text] forKey:@"message"]; 
[message setObject:[PFUser currentUser][@"userID"] forKey:@"senderID"]; 
[message setObject:self.selectedFriendID forKey:@"receiverID"]; 

//RIGHT HERE 
[message setObject:message.objectId forKey:@"messageID"]; 

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

} 

的想法是這樣,所有曾經在PFQueryTableViewController查詢的信息都將屬於一起,爲了因爲它們都具有相同的「MESSAGEID」。

這給了我一個錯誤'不能使用nil鍵或PFObject上的值。使用NSNull作爲值。'

如果任何人都可以指出我正確的方向,所以我可以做到這一點,我會愛你。

回答

4

錯誤消息告訴您發生了什麼 - 您試圖在messageID密鑰中存儲零值,但這是不允許的。

它發生的原因是objectId僅在保存對象後才分配 - 新分配的對象還沒有值。

因此,您可以等到saveInBackgroundWithBlock完成並檢索objectId,或者您可以使用替代ID。

我建議你將messageID列更改爲字符串並使用UUID。然後,您可以在將第一條消息保存在對話中之前創建一個新的UUID。你可以用

NSString *messageID=[[NSUUID UUID] UUIDString]; 
+0

哇我不知道這個班。這個案例非常有用。你提供了兩個有用的答案,這兩個方面的工作和做到了這一點。非常好的答案。謝謝保羅。 –