2014-07-10 2 views
1

Scénario = J'ai un PFQueryTableViewController qui va afficher les messages que les utilisateurs envoient les uns aux autres. Pour créer une relation entre les conversations, j'ai sauvegardé une chaîne à l'objet appelé "messageID". Je veux que "messageID" soit une copie exacte du "objectId" du premier du message pour que la conversation prenne un sens chronologique et je vais "commanderByAscending" du périmètre "createdAt".Parse iOS SDK: Comment copier objectId lors de la création d'un objet PFO

Question = Comment définir (copier) le "objectId" du premier message?

L'idée que je suis en train de faire est la ...

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) { 

} 

L'idée est de cette façon tous les messages une fois interrogés dans le PFQueryTableViewController appartiendront tous ensemble et pour tous parce qu'ils ont le même "ID du message". Cela me donne une erreur "Impossible d'utiliser nil pour les clés ou les valeurs sur PFObject. Utilisez NSNull pour les valeurs. '

Si quelqu'un pouvait me diriger dans la bonne direction afin que je puisse accomplir cela, je vais vous aimer.

Répondre

4

Le message d'erreur vous indique ce qui se passe. Vous essayez de stocker une valeur nulle dans la clé messageID, ce qui n'est pas autorisé.

La raison pour laquelle cela se produit est objectId est seulement affectée une fois l'objet enregistré - un objet nouvellement alloué n'a pas encore de valeur. Par conséquent, vous pouvez attendre que le saveInBackgroundWithBlock soit terminé et récupérer l'objet objectId, ou vous pouvez utiliser un autre ID.

Je vous suggère de changer votre colonne messageID en chaîne et d'utiliser un UUID. Vous pouvez ensuite créer un nouvel UUID avant de sauvegarder le premier message de la conversation. Vous pouvez utiliser

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

Wow, je n'avais aucune idée de cette classe. Classe très utile pour ce cas. Et vous avez fourni deux réponses utiles qui à la fois fonctionnent et l'ont fait au point. Très bonne réponse Merci Paul. –

Questions connexes