2013-05-19 11 views
5

Mam dwie klasy, Company i MyCompany. MyCompany jest podklasą firmy, a firma jest podklasą NSManagedObject. Próbuję napisać predykat dla NSFetchRequest, który zwróci wyniki klasy Company, ale odfiltrować obiekty MyCompany.NSPredicate, który odfiltrowuje wyniki podklasy

Próbowałem następujące (sugerowana stąd https://stackoverflow.com/a/8065935/472344):

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

ale pojawia się błąd:

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

Próbowałem również (sugerowany stąd https://stackoverflow.com/a/11693983/472344, wiem, że naprawdę chcesz nie SELF toKindOfClass, ale właśnie testowałem z dokładnie tą samą komendą, jak podano w odpowiedzi):

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

I uzyskałem następujący błąd:

'Unknown/unsupported comparison predicate operator type' 

Jak mogę napisać predykat aby osiągnąć to, co chcę? Obsługuję system iOS 5 i nowsze.

+0

Klasa, o której mowa, nie jest obiektem NSObject, więc nie odpowiada na "class" lub "className" – Stavash

+0

Company i MyCompany są obiektami NSObjects tak jak dziedziczą po obiekcie NSManagedObject, ale teraz zdaję sobie sprawę, że predykat jest stosowany do NSSQLEntity, więc moja sytuacja nie jest odpowiednikiem sytuacji, na którą odpowiedziały odpowiedzi. Jednak nadal potrzebuję rozwiązania mojego problemu. – Darren

Odpowiedz

7

Można ustawić

[fetchRequest setIncludesSubentities:NO]; 

tak że żądanie pobrania zwraca tylko obiekty dokładnie o rodzaj jednostki wniosek, i nie obejmuje subentities.

Jest to (o ile mi wiadomo), że nie można odwoływać się do klasy obiektów lub nazwy jednostki w predykacie, jeśli predykat jest używany w żądaniu pobierania danych podstawowych.

+0

Wygląda na to, że zadziała, a dzięki za dodatkowe informacje. Spróbuję tego. – Darren

+0

Mogę potwierdzić, że to działa. – pr1001