我有一个名为 Entry 的核心数据模型对象。
在此我有一个属性 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 上设置谓词的行,我的代码将完美执行。
我显然对谓词不感兴趣,但在尝试找出如何对核心数据模型对象中的 BOOLEAN 值执行操作时遇到了很多麻烦。请注意,有关于如何使用字符串或整数值执行此操作的答案,但我找不到布尔示例。
非常感谢 !
这并不是 NSPredicate 特有的......每当你有%@
在格式字符串中,相应的值必须是指向对象的指针,而 BOOL 不符合条件。因此,不要传递 YES,而是传递[NSNumber numberWithBool: YES]
.
在比我最初编写答案时更新的 Xcode 和 SDK 版本中,您可以使用@YES
代替[NSNumber numberWithBool: YES]
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)