2012-04-20 27 views
12

Quiero conocer los objetos de los datos básicos, mi código:para comprobar un objeto coredata es nula

Tipos:

signedDate (Fecha)

alarmDate (Fecha)

starTime (NSDate)

endTime (NSDate)

NSString *str = @"(signedDate >= %@) AND (signedDate < %@) AND (alarmDate == nil)"; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:str, starTime, endTime]; 
[request setPredicate:predicate]; 
NSArray *results=[context executeFetchRequest:request error:nil]; 

predicate is wrong? ¿Cómo juzgar un objeto de coredata es nulo? ¿Cuál debería ser el predicado?

+0

Por favor, añadir un cierre "a la asignación str para fijar el formato de color. No puedo, porque esa edición es de menos de 6 caracteres. –

Respuesta

19

No creo que la sintaxis del predicado requiera == nil. uso único =

NSString *str = @"(signedDate >= %@) AND (signedDate < %@) AND (alarmDate = nil)"; 

código anterior funciona bien. Si debe ser SÍ, ya que es nulo.

BOOL ok; 
predicate = [NSPredicate predicateWithFormat:@"firstName = nil"]; 
ok = [predicate evaluateWithObject:[NSDictionary dictionary]]; 

ok = [predicate evaluateWithObject: 
[NSDictionary dictionaryWithObject:[NSNull null] forKey:@"firstName"]]; 
+0

Lo intenté, pero también devolvió los resultados incorrectos – yjw44

+5

= y == es equivalente en la sintaxis del predicado. [Aquí está la documentación] (https : //developer.apple.com/library/ios/documentation/Cocoa/Conceptual/Predicates/Articles/pSyntax.html). – Daniel

8

De apple docs

Comprobando NULL

Si desea hacer coincidir los valores nulos, debe incluir una prueba específica, además de otras comparaciones, como se ilustra en el siguiente fragmento.

predicate = [NSPredicate predicateWithFormat:@"(firstName == %@) || (firstName = nil)", firstName]; 
filteredArray = [array filteredArrayUsingPredicate:predicate]; 
NSLog(@"filteredArray: %@", filteredArray); 

// Output: 
// filteredArray: ({ lastName = Turner; }, { birthday = 1972-03-23 20:45:32 -0800; firstName = Ben; lastName = Ballard; } 

Por implicación, una prueba para nula de que coincide con un valor nulo devuelve true. En el siguiente fragmento de código, ok se establece en SÍ para ambas evaluaciones de predicados.

BOOL ok; 
predicate = [NSPredicate predicateWithFormat:@"firstName = nil"]; 
ok = [predicate evaluateWithObject:[NSDictionary dictionary]]; 

ok = [predicate evaluateWithObject: 
    [NSDictionary dictionaryWithObject:[NSNull null] forKey:@"firstName"]]; 
+1

No entiendo, cómo editar mi código? AlarmDate es una atributo en una entidad de coredata – yjw44

+0

¿Qué error está recibiendo? – shawnwall

+0

Solo quiero averiguar los objetos que su fecha de inicio de sesión es entre startTime y endTime, y también alarmDate es nulo – yjw44

Cuestiones relacionadas