场景=我有一个PFQueryTableViewController,它将显示用户相互发送的消息。为了在对话之间创建关系,我将一个字符串保存到名为“messageID”的对象中。我希望“messageID”是第一个消息的“objectId”的精确副本,以便对话按时间顺序排列,并且我将从“createdAt”外围“orderByAscending”。
问题=如何从第一条消息中设置(复制)“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”。
这给了我一个错误'不能在PFObject上使用nil作为键或值。使用NSNull作为值。'
如果有人能指出我正确的方向,那么我可以做到这一点,我会爱你。
答案 0 :(得分:4)
错误消息告诉您发生了什么 - 您试图在messageID
密钥中存储nil值,这是不允许的。
它发生的原因是objectId
仅在保存对象时分配 - 新分配的对象尚未有值。
因此,您可以等到saveInBackgroundWithBlock
完成并检索objectId,或者您可以使用替代ID。
我建议您将messageID
列更改为String并使用UUID。然后,您可以在对话中保存第一条消息之前创建新的UUID。你可以使用
NSString *messageID=[[NSUUID UUID] UUIDString];