2012-04-25 13 views
9

Spero di trovare un modo per verificare se un attributo CoreData è vuoto. L'attributo stesso è di tipo dati binari. Se l'attributo è vuoto, potrei dire alla mia classe di scaricare e salvare alcuni dati in questo attributo.Verifica se l'attributo CoreData è vuoto

In base alla Documentazione CoreData, non si dovrebbe continuare a cercare per vedere se gli oggetti esistono. Mi chiedo se ci sia anche un modo per farlo eventualmente? senza rompere questa 'legge'?

Questo è il mio primo tentativo di utilizzare CoreData. Lo aggiungo al mio codice in seguito, che è leggermente più doloroso, ma nel complesso finora tutto sembra andare bene. Ho solo bisogno di capire un modo logico per verificare se l'attributo ha dei valori. In caso contrario, ho bisogno di scaricare e salvare i nuovi dati, se lo fa, allora uso solo ciò che è nell'attributo.

Aggiornamento:

Ho appena trovato questo metodo nel quadro CoreData che ho letto anche se cercando di prendere una pausa su questo. Non sono sicuro che sarebbe d'aiuto .. cosa ne pensate voi ragazzi?

willAccessValueForKey: Fornisce il supporto per valore-chiave osservando accesso notifica.

  • (void) willAccessValueForKey: (NSString *) Parametri fondamentali chiave Il nome di una delle proprietà del ricevitore. Discussione Vedi didAccessValueForKey: per maggiori dettagli. È possibile richiamare questo metodo con il valore chiave di nil per assicurarsi che sia stato generato un errore, come illustrato dal seguente esempio.

[aManagedObject willAccessValueForKey: nil];

Non

sicuro davvero .. le cose che non capisco è Fornisce il supporto per valore-chiave osservando la notifica di accesso. ???

risposta

11

Questa notifica è per quando il valore sarà accessibile.

Se ho capito bene, non vuoi vedere se esiste un'entità, ma un attributo all'interno dell'entità. Quindi, presumo tu lo abbia contrassegnato come un attributo opzionale.

Supponiamo di avere un attributo di dati binari chiamato rawData. Se si desidera trovare tutti gli oggetti @ "MyEntity" nel database che non hanno alcun set di dati per questo attributo, è possibile emettere questa richiesta di recupero.

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"MyEntity"]; 
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"rawData = nil"]; 
NSArray *results = [managedObjectContext executeFetchRequest:fetchRequest error:0]; 
+0

ok, bello .. grazie per quello. È solo un po 'preoccupante perché ho letto che rilasciare molte richieste di recupero è una cosa cattiva da fare ..: P –

+3

Puoi sempre impedire a qualcuno di creare un oggetto con un attributo vuoto rendendolo non opzionale. Oppure puoi creare oggetti che monitorano le modifiche al database e aggiungi/rimuovi oggetti in un elenco globale quando hanno il valore di attributo spacial nil/non-nil. –