2013-05-19 18 views
5

Ho due classi, Società e MyCompany. MyCompany è una sottoclasse di Company e Company è una sottoclasse di NSManagedObject. Sto provando a scrivere un predicato per una NSFetchRequest che restituirà i risultati della classe Company, ma filtra gli oggetti MyCompany.NSPredicate che filtra i risultati della sottoclasse

Ho provato quanto segue (suggerito da qui https://stackoverflow.com/a/8065935/472344):

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"class != %@",NSStringFromClass([myCompany class])]; 

ma ottengo un errore:

'keypath class not found in entity <NSSQLEntity CKCompany id=1>' 

Ho anche provato (suggerito da qui https://stackoverflow.com/a/11693983/472344, so che voglio davvero non SELF isKindOfClass, ma stavo testando con lo stesso identico comando fornito nella risposta):

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self isKindOfClass: %@", [myCompany class]; 

E ottenuto il seguente errore:

'Unknown/unsupported comparison predicate operator type' 

Come posso scrivere un predicato per ottenere ciò che voglio? Sto supportando iOS 5 e versioni successive.

+0

La classe in questione non è un NSObject quindi non risponde a "class" o "className" – Stavash

+0

Company e MyCompany sono NSObjects come ereditano da NSManagedObject, ma mi rendo conto ora che il predicato viene applicato al NSSQLEntity e quindi la mia situazione non è equivalente alla situazione a cui le risposte stavano rispondendo. Tuttavia ho ancora bisogno di una soluzione al mio problema. – Darren

risposta

7

È possibile impostare

[fetchRequest setIncludesSubentities:NO]; 

in modo che la richiesta di recupero restituisce solo oggetti di esattamente il tipo di entità della richiesta, e non include sottoentità.

È (per quanto ne so) non è possibile fare riferimento alla classe degli oggetti o al nome dell'entità in un predicato se il predicato viene utilizzato in una richiesta di recupero dei dati principali.

+0

Sembra che funzionerà, e grazie per le informazioni extra. Ci proverò. – Darren

+0

Posso confermare che funziona. – pr1001

Problemi correlati