0

У меня есть события, каждое событие имеет к-одному с NSManagedObject Entertainment и развлечения имеет ко-многим, и имеет NSSet событийNSPredicate для определения класса объекта

@interface Event : NSManagedObject 
@property (nonatomic, retain) NSDate *creationDate; 
@property (nonatomic, retain) NSDate * date; 
@property (nonatomic, retain) NSString * objectId; 
@property (nonatomic, retain) NSString * price; 
@property (nonatomic, retain) Entertainment *entertainment; 
@property (nonatomic, retain) Place *place; 
@property (nonatomic, retain) NSString *townName; 
- (void)fillProperties:(NSDictionary *)JSON; 
@end 

@interface Entertainment : NSManagedObject 
@property (nonatomic, retain) NSString * additionalInfo; 
@property (nonatomic, retain) NSNumber * allCommentsLoaded; 
@property (nonatomic, retain) id image; 
@property (nonatomic, retain) NSString * imageURL; 
@property (nonatomic, retain) NSString * info; 
@property (nonatomic, retain) NSString * name; 
@property (nonatomic, retain) NSString * objectId; 
@property (nonatomic, retain) NSSet *comments; 
@property (nonatomic, retain) NSSet *events; 
- (void)fillProperties:(NSDictionary *)JSON; 
@end 

Entertainment много подклассов Поэтому мне нужно создать такую ​​NSFetchedResultController для получения событий, которые имеют развлечение определенного класса

Я попытался использовать

- (NSFetchedResultsController *)fetchedResultsControllerForEventsFromEntertainment:(Class)className 
{ 
    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:NSStringFromClass([Event class])]; 
    fetchRequest.predicate = [NSPredicate predicateWithFormat:@"entertainment isMemberOfClass: %@", [className class]]; 
    NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"objectId" ascending:YES]; 
    fetchRequest.sortDescriptors = @[sortDescriptor]; 
    fetchRequest.fetchBatchSize = 20; 
    NSFetchedResultsController *fetchResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:nil]; 
    return fetchResultsController; 
} 

Но я получаю ошибку:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason: 'Unknown/unsupported comparison predicate operator type' 
*** 

Я читал, что, когда мы работаем с SQLite, этот метод isMemberOfClass не работает, потому что SQLite не знаю такой метод. В обычном NSPredicate, например, в простом массиве, он должен работать.

Как я могу получить события из SQLite, которые имеют Entertainment определенного класса?

+0

Возможный дубликат [NSPredicate, который фильтрует результаты подкласса] (https: // stackoverflow.com/questions/16636338/nspredicate-that-filters-out-subclass-results) –

ответ

1

Невозможно обратиться к имени сущности или имени класса в предикате a (Запрос на выборку ядра Core на основе SQLite).

Но для извлечения только объекты субъекта, указанного в запросе выборки, а не объекты любого subentity, просто установите

[fetchRequest setIncludesSubentities:NO]; 
Смежные вопросы