2012-04-20 13 views
12

voglio scoprire gli oggetti nei dati di base, il mio codice:per controllare un oggetto CoreData è pari a zero

Tipi:

signedDate (Data)

alarmDate (Data)

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]; 

predicato è sbagliato? Come giudicare un oggetto coredata è nulla? Quale dovrebbe essere il predicato?

+0

prega di aggiungere una chiusura "per l'assegnazione str per fissare la formattazione del colore. Non posso, perché questo modifica è inferiore a 6 caratteri. –

risposta

19

Non penso che la sintassi del predicato richieda == nil. Utilizzare un solo =

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

codice È sopra funziona a destra. Se dovrebbe essere SÌ poiché è zero.

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

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

Ho provato, ma anche restituendo i risultati errati – yjw44

+5

= e == è equivalente nella sintassi del predicato. [Ecco la documentazione] (https : //developer.apple.com/library/ios/documentation/Cocoa/Conceptual/Predicates/Articles/pSyntax.html). – Daniel

8

Da apple docs

Controllare per NULL

Se si desidera far corrispondere i valori nulli, è necessario includere un test specifico in aggiunta ad altri confronti, come illustrato nel seguente frammento.

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; } 

In pratica, un test per null che corrisponde a un valore nullo restituisce true. Nel seguente frammento di codice, ok è impostato su SÌ per entrambe le valutazioni dei predicati.

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

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

Non capisco, come modificare il mio codice? AlarmDate è un attributo in un'entità di coredata – yjw44

+0

Che errore stai ricevendo? – shawnwall

+0

Voglio solo scoprire gli oggetti che il suo data firmato è tra startTime e endTime, e anche alarmDate è nil – yjw44

Problemi correlati