2017-05-18 1 views
0

Je dois mettre à jour l'utilisateur courant et refaire chaque fois que l'application se lance pour que je puisse saisir la version la plus à jour de l'objet utilisateur au lieu de celle mise en cache sur le disque . Dois-je faire des extractions supplémentaires pour tous ces champs de référence, puis mettre à jour le fichier de l'utilisateur actuel en conséquence? Fetch seul renvoie les données stockées dans votre base de données.La clé n'a aucune donnée de la sous-classe de PFUser avec le champ de pointeur de référence

Répondre

0

Pour un pointeur, il s'agit simplement d'un objet JSON de base spécifiant qu'il s'agit d'un pointeur, du nom de classe et de l'objectId de cet objet. Afin de retourner ces données, vous aurez plutôt besoin d'utiliser une requête d'analyse et d'inclure le champ que vous voulez. Inclure les travaux avec la notation par points, de sorte que vous pouvez faire quelque chose comme objectAQuery.include("objectB.objectC") qui inclura toutes les données de objectC stockées comme un pointeur sur l'objet B. Cela ne comprendra pas toutes les données d'objectB, si je ne me trompe pas, bien que je ne puisse pas le dire avec certitude.

Enfin, utilisez query.get() pour obtenir un objet avec un objectId spécifique. Cela va jeter une erreur si l'objet n'existe pas, alors assurez-vous de gérer cela correctement. Vous pouvez également utiliser query equalTo sur l'objectId puis appeler query.first(), mais get serait plus recommandé.

+0

Remarque - mes exemples utilisaient JS, pas Swift, donc les noms de fonctions peuvent être différents, mais des équivalents existent certainement dans les deux SDK. –

+0

Je sais que je peux utiliser la requête pour obtenir les données correspondantes, mais puis-je le faire en un seul passage? Le problème est que le PFUser est mis en cache et stocké sur le disque, chaque fois que je lance l'application, je m'attends à mettre à jour l'utilisateur actuel de la base de données distante au lieu d'utiliser celui du cache. Habituellement, nous utilisons fetchIfNeed pour mettre à jour le récepteur à une nouvelle valeur, je ne sais pas comment cela se fait dans le cas où votre objet a des champs de pointeur –

+0

fetchIfNeeded ne fait pas ce que vous pensez qu'il est en train de faire. fetchIfNeeded va seulement chercher si, disons, vous appelez fetch sur un objectA qui a un pointeur sur un objet B, et que vous appelez fetchIfNeeded sur objectB. Ou, si vous créez un nouvel objet PFObject et que vous définissez son identifiant manuellement, appelez fetchIfNeeded. Récupérer si nécessaire ne récupérera jamais un objet précédemment récupéré. Dès que l'objet est récupéré, le booléen qui détermine si fetchIfNeeded ira chercher est retourné. Il ne va pas chercher quand il y a de nouvelles informations. –