У меня есть базовый объект модели данных под названием Запись. В этом у меня есть атрибут IsFavorite.
Я хотел бы использовать NSPredicate для фильтрации результатов моего NSFetchedResultsController.
В настоящее время я получаю EXC_BAD_ACCESS, когда выборка выполняется.
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
// Edit the entity name as appropriate.
NSEntityDescription *thisEntry = [NSEntityDescription entityForName:@"Entry" inManagedObjectContext:managedObjectContext_];
[fetchRequest setEntity:thisEntry];
NSPredicate *fetchPredicate = [NSPredicate predicateWithFormat:@"Entry.isFavorite == %@", [NSNumber numberWithBool: YES]];
[fetchRequest setPredicate:predicate];
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"];
aFetchedResultsController.delegate = self;
NSError *error = nil;
if (![aFetchedResultsController performFetch:&error]) {
NSlog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
ЕСЛИ я удаляю строку, которая устанавливает предикат на fetchRequest, мой код выполняется отлично.
Я ясно n00bin на предикате, но испытал много затруднений при попытке узнать, как выполнить операции на БУЛЕВОМ ЗНАЧЕНИИ от базового объекта модели данных. Отмечено, что существуют ответы о том, как сделать это со строкой или международным значением, но я не могу найти БУЛЕВ пример.
Большое спасибо!
На самом деле это не относится к NSPredicate ... Всякий раз, когда у вас есть % @
в строке формата, соответствующее значение должно быть указателем на объект, а BOOL не подходит. Поэтому вместо передачи YES передайте [NSNumber numberWithBool: YES]
.
В более новых версиях Xcode и SDK, чем когда я изначально писал ответ, вы можете использовать @YES
вместо [NSNumber numberWithBool: YES]
.