7
votes

Comment empêcher l'analyse de sauver les enfants PFObject?

Je suis confronté à un problème très courant avec Parse et iOS.

J'ai une classe post forte> avec la structure suivante: p>

  • texte (chaîne) code> li>
  • image (pffile) code> li>
  • Likesusuers (tableau de chaîne) Code> Li>
  • likescount (int) code> li>
  • de (pointeur à l'utilisateur qui l'a posté) code> li> ul>

    et si l'utilisateur (déjà connecté) aime un post. Je suis tout simplement incrémentant les goûts et l'ajout d'objections de l'utilisateur à la matrice p>

    par exemple: User-2 aime l'utilisateur-1's's Post. P>

    PostObject.incrementKey("Likes")
    PostObject.addObject((PFUser.currentUser()?.objectId)!, forKey: "LikesUsers")
    PostObject.saveEventually()
    


4 commentaires

Si je ne me trompe pas, c'est une sorte de problème de permission que vous avez fait face. Puisque vous avez mentionné iOS, je suppose que vous faites le côté du client de la mise à jour. Comme le poste n'appartient pas à l'utilisateur actuel, il ne pourra pas l'enregistrer. Ce que vous pouvez faire est de créer une fonction de codes cloud et d'appeler cette méthode qui passe le long de l'utilisateur actuel.


Je ne peux pas faire une sauvegarde éventuellement du nuage d'analyses


Pouvez-vous élaborer plus sur pourquoi vous ne pouvez pas? Quelle est l'erreur?


Quelles ACLS avez-vous définies sur la classe _USER et ses objets? Si vous avez limité LIRE sur un niveau de classe, cela pourrait signifier que l'utilisateur connecté n'est pas en mesure de voir d'autres utilisateurs de la classe _Utiliser et tente ainsi de créer un autre utilisateur.


3 Réponses :


2
votes

des forums parse.com:

Lorsque vous enregistrez un objet avec un pointeur, analysez l'intégralité de l'objet et enregistre les champs «sale» (modifié depuis la dernière sauvegarde). Il inspecte également tous les objets pointés par des pointeurs. Si votre objet a un pointeur sur Pfuser et que l'instance du pfuser est «sale», l'analyse sauvegardera également l'objet, puis essayez de sauvegarder l'instance de la pfuser. Mon hypothèse est que quelque part dans votre code, vous définissez une valeur sur un utilisateur, puis ne sauvegarder pas l'utilisateur. Ceci, je soupçonne, est la source de votre erreur. Parcourez votre code et recherchez n'importe où vous définissez une instance Pfuser et assurez-vous qu'il y a une sauvegarde correspondante. Si vous ne pouvez pas le trouver à première vue, assurez-vous de vérifier tous les blocs et de vous assurer que vous n'êtes pas de sale de manière asynchrone et d'essayer de l'enregistrer.

essayez-vous d'apporter des modifications à l'utilisateur que le message a été effectué par?


1 commentaires

J'ai traversé mon code et je n'essaie pas de changer de pfuser ou d'essayer de faire des changements



2
votes

Réponse courte:

Essayez de définir à partir du champ comme: xxx

Ceci n'est pas testé.

mais je vous suggère de changer l'architecture

Je faisais face au même problème et j'ai finalement décidé de déplacer goûts à Utilisateur Classe et apportez-le Relation Type. La documentation d'analyse indique que le type est préférable pour garder de nombreux objets. Étant donné que LikeSuSuers est un tableau d'objets, la performance peut chuter de manière significative si un message obtiendra beaucoup de choses: L'application téléchargera tous les utilisateurs a aimé cet article. Voir ceci pour plus d'informations: https://parse.com/docs/ios/Guide # Objets-relation-Data

Voici comment ma structure de classe a l'air (simplifiée):

utilisateur : < ul>

  • postlikes (relation)

    message :

    • Auteur (PFOBJECT)
    • likescount (int)

      i Déplacé comme / n'aime pas la logique à la fonction de codes cloud: xxx

      fonctionne juste bien.


  • 1 commentaires

    Merci pour la fonction de cloud fourni, mais j'aimerais utiliser SavantageAventuellement avec une option hors connexion.



    0
    votes

    J'ai créé un projet à partir de zéro pour vous. Je pense que vous manquez quelque chose lorsque vous créez votre pfclass. Je ne sais pas. Tout ce qui regarde mes codes,

    Ceci est le ViewController Code> et contient une touche Action forte>; P>

        class Post: PFObject, PFSubclassing {
    
        // Your Properties
        @NSManaged var owner: PFUser
        @NSManaged var likeCount: NSNumber
    
        static func parseClassName() -> String {
            return "Post" // Your Class Name
        }
       }
    


    1 commentaires

    Non, cela ne résout pas le problème! Je pense que vous comprenez malgré la question