2011-08-18 34 views
9

Estoy recibiendo un bloqueo al cambiar un atributo BOOL de mi NSManagedObject.Datos básicos NSInvalidArgumentException Error

El código para guardar el objeto es:

self.detailItem.bookmark = [NSNumber numberWithBool:YES]; 
NSError *error = nil; 
if (! [self.detailItem.managedObjectContext save:&error]) 
{ 
    // Handle the error. 
} 
NSLog(@"%@", error); 

Y el error:

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.' 
+0

Necesita agregar más código: ¿cómo se ve su detailItem? ¿es solo un NSManagedObject? – deanWombourne

+0

Sí, el 'detailItem' es solo un NSManagedObject con un atributo BOOL llamado' bookmark'. –

Respuesta

7

ADVERTENCIA: Esta respuesta se basa en una suposición que he hecho en base al mensaje de error; ¡puede ser 100% incorrecto!


El error parece que es un mal formados NSPredicate. Es posible que tenga algo así como

NSString *name = @"Bob"; 
[NSPredicate predictaeWithFormat:@"ANY %K IN %@", @"name", name]; 

Eso parece que podría encontrar nada donde name = 'Bob' pero será no, va a lanzar una excepción :(

Si está utilizando 'IN' que necesita para aprobar .. un NSSet o NSArray es decir

NSArray *names = [NSArray arrayWithObjects:@"Alice", @"Bob", nil]; 
[NSPredicate predictaeWithFormat:@"ANY %K IN %@", @"name", names]; 

esto encontrará cualquier cosa con el nombre de 'Bob' o 'Alice'

si sólo quería buscar 'Bob', acaba de hacer esto:

NSString *name = @"Bob"; 
[NSPredicate predictaeWithFormat:@"%K == %@", @"name", name]; 
+0

No hay predicado en este VC. Sin embargo, tengo VC separado que tiene este predicado '[NSPredicate predicateWithFormat: @" CUALQUIER marcador == SÍ "];' ¿Hay algo mal allí? –

+1

El error implica que es algún otro objeto que está interesado en los cambios en el objeto administrado que está causando la excepción, por lo que podría ser ese predicado.Pruébalo sin el 'ANY' y mira qué pasa? – deanWombourne

+0

Intenté eso pero todavía tengo un bloqueo. Para el VC con el que estamos trabajando, eso es todo el código que he relacionado con el objeto, el objeto se empuja desde la vista principal. No tengo ningún código MOC porque el objeto debería extraer el MOC. –

3

creo deanWornbourne escribió la respuesta correcta, pero no era muy claro para mí, así que voy a repetir su respuesta y puntos de vista, y proporcionar una explicación adicional.

ProgramGuy recibía el grave error de aplicación porque su predicado era incorrecto. La razón por la que ANY bookmark == YES es incorrecto es que "CUALQUIER" solo se usa cuando tiene una relación de uno a varios en su modelo. Cuando tiene una relación uno a uno, debe usar bookmark == YES.

El 'error grave de la aplicación' es un poco tonto y causa más alarma de la necesaria. Sin embargo, te da una pista bastante buena del error. Dice que hay un "error dentro de un observador ...". Eso significa que tiene algún objeto 'NSFetchedResults' o 'NSFetchedResultsController' (ya que estamos hablando del NSManagedObjectContextObjectChangedNotification). Además, el mensaje de error dice left hand side for an ALL or ANY operator must be either an NSArray ... Esto sugiere que debe haber una relación de uno a muchos.

Espero que eso ayude.

0

Sólo un FYI. La respuesta de deanWombourne fue 100% correcta en mi caso.

NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyTeamSchedule" inManagedObjectContext:[[MyTeamStore sharedStore] context]]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY myteam.teamname == %@", myTeamName]; 

Después de eliminar el ANY, se solucionó el problema. ¡Gracias a Dios por decano! Me salvó de muchas horas de resolución de problemas y dolores de cabeza.

Cuestiones relacionadas