Possiedo un modello di dati di base in cui un'entità attività include una relazione opzionale to-many ExcludedDays all'entità ExcludedDay. Una delle proprietà di ExcludedDay è day, che è un oggetto NSDate. L'entità ExcludedDay ha una relazione inversa obbligatoria to-one con l'entità Task.Come configurare correttamente un NSPredicate per una relazione to-many quando si utilizzano i dati principali?
Per recuperare le attività per un giorno specifico, è necessario assicurarsi che il giorno specificato non appaia come proprietà del giorno di qualsiasi entità di ExludedDay.
ho iniziato cercando
NSPredicate *dayIsNotExcludedPredicate = [NSPredicate predicateWithFormat: @"ALL excludedDays.day != %@", today];
Tuttavia, nonostante quello che dice la documentazione, ALL non funziona e l'applicazione genera un'eccezione: terminazione app a causa di eccezione non identificata ‘NSInvalidArgumentException’, la ragione: ‘predicato non supportato.
Dopo aver postato la stessa domanda in questo forum, sono stato in grado di elaborare il seguente predicato con l'aiuto di varie persone:
NSPredicate * dayIsNotExcludedPredicate = [NSPredicate predicateWithFormat: @"[email protected] == 0 || ([email protected] > 0 && NONE excludedDays.day == %@))", today];
Anche se questo ha funzionato in un primo momento, ho appena scoperto che questo funziona solo quando l'entità ExcludedDay contiene SOLO un giorno. Non appena l'entità ExcludedDay contiene più di un giorno per la stessa attività, questo predicato smette di funzionare. Di conseguenza, un'attività viene selezionata per un giorno anche se il giorno appare come un giorno nell'entità ExcludedDay, che ovviamente è errata. Il problema non è legato al fatto che il giorno della proprietà sia un oggetto NSDate: sostituendo il giorno con il NSString corrispondente o equivalentemente con un numero intero, ho ancora lo stesso problema e un comportamento errato.
Qual è il modo corretto di implementare il predicato in questo caso? Può essere un bug relativo all'ANY operatore aggregato quando si utilizzano i dati principali? Grazie in anticipo, questo mi sta facendo impazzire.
Forse sai come scrivere l'espressione con SUBQUERY con classi NSExpresion e NSComparisonPredicate? Con la tua risposta, ho deciso la mia domanda: http://stackoverflow.com/questions/2006927/whats-better-way-to-build-nspredicate-with-to-many-deep-relationships Grazie – Victor
Grazie mille per questa risposta, davvero utile. – Maria