Je reçois un crash lors de la modification d'un attribut bool de mon nsmanagedObject.
Le code pour enregistrer l'objet est le suivant: p> et l'erreur: p > Serious application error. Exception was caught during Core Data change processing. This is usually a bug within an observer of NSManagedObjectContextObjectsDidChangeNotification. The left hand side for an ALL or ANY operator must be either an NSArray or an NSSet. with userInfo (null)
2011-08-18 15:41:32.866 Codes[5260:707] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'The left hand side for an ALL or ANY operator must be either an NSArray or an NSSet.'
3 Réponses :
AVERTISSEMENT: Cette réponse est basée sur une supposition que j'ai faite en fonction du message d'erreur; Cela peut être 100% erroné!
L'erreur ressemble à ce que c'est un qui semble trouver quoi que ce soit sur lequel si vous utilisez "dans", vous devez passer un nsset ou nsarray, c'est-à-dire. p> Ceci trouvera quelque chose avec le nom 'Bob' ou 'Alice'. P> Si vous vouliez simplement rechercher 'Bob', faites cela: P> NSpredicate code>. Vous pourriez avoir quelque chose comme p>
name = 'bob' code> mais il ne le fera pas, ça va lancer un Exception: ( p>
NSString *name = @"Bob";
[NSPredicate predictaeWithFormat:@"%K == %@", @"name", name];
Il n'y a pas de prédicat dans cette VC. Cependant, j'ai séparé VC qui a ce prédicat [nspredicate prédicatwithFormat: @ "tout bookmark == oui"]; code> y a-t-il quelque chose de mal?
L'erreur implique que c'est un autre objet qui est intéressé par les modifications apportées à votre objet géré, ce qui cause l'exception afin que cela puisse être ce prédicat. Essayez-le sans le 'aucun »et voyez ce qui se passe?
Essayé cela mais j'ai toujours un crash. Pour le VC, nous travaillons avec tout le code que j'ai lié à l'objet, l'objet est poussé de la vue parent. Je n'ai pas de code MOC car l'objet devrait tirer le MOC lui-même.
C'est le prédicat car "tout bookmark == oui" code> n'est pas valide. Le crash est causé par le prédicat perturbant le graphique d'objet qui ne devient pas apparent avant de sauvegarder le contexte. Les erreurs de sauvegarde ne doivent pas nécessairement être liées au code immédiatement avant la sauvegarde. Toute erreur qui accumule dans le contexte peut ne pas être apparente avant une opération de sauvegarde.
Votre hypothèse était correcte pour mon cas d'obtenir exactement la même erreur de Coredata. Supprimer un prédicat incorrect supprime le crash.
Remarque: vous devriez JAMAIS B> Utiliser n'importe lequel et dans la même expression de prédicat, cela peut provoquer des accidents! La chose étrange est que cela pourrait fonctionner plusieurs fois et crash dans d'autres, exactement le même prédicat! Il suffit de terminer la réparation d'un bug de crash causé exactement en utilisant n'importe lequel et dans la même expression de prédicat. Bit plus de clarification: tout est utilisé pour les relations, vous ne doit jamais B> l'utiliser pour une expression d'attribut simple.
Avez-vous un exemple des crashs que vous obtenez - j'utilise tout..in .. dans les applications en direct depuis quelques années et n'a pas eu de crash jusqu'à présent. . ou ma déclaration de crash est cassée;)
Je pense que Deanwornbourne a écrit la bonne réponse, mais ce n'était pas très clair pour moi, alors je vais reformuler sa réponse et ses idées et fournir une explication supplémentaire. p>
Programguy a obtenu l'erreur d'application sérieuse car son prédicat était faux. La raison pour laquelle L'erreur d'application sérieuse est un peu idiote et provoque plus d'alarme que nécessaire. Cependant, cela vous donne un très bon indice à l'erreur. Il dit qu'il y a un "bug dans un observateur.". Cela signifie que vous avez des " Espérons que cela aide. P> tout bookmark == Oui code> est faux, c'est que "tout" n'est utilisé que lorsque vous avez une relation unique dans votre modèle. Lorsque vous avez une relation unique, vous devez utiliser
bookmark == Oui code>. p>
nsfetchedresults " objet> 'objet ou'
nsfetchedResultSluTroller code> '' (puisque nous parlons du
nsmanagedObjectContextObjectChangeDNotification code>). En outre, le message d'erreur indique
Le côté gauche de gauche pour un tout ou n'importe quel opérateur doit être soit un nsarray code> ... Cela signifie qu'il doit y avoir une relation une à plusieurs. p>
juste un fyi. La réponse de Deanwombourne était 100% correcte dans mon cas. Après avoir retiré le problème du problème a été résolu. Merci mon Dieu pour Dean! Je viens de m'avoir sauvé de nombreuses heures de dépannage et de maux de tête. P> p>
Vous devez ajouter plus de code - à quoi ressemble votre détailItem; Est-ce juste un nsmanagedObject?
Ouais, le
détaillanttem code> est juste un nsmanagedObject avec un attribut BOOL appelé
Bookmark code>.