Lan*_*nce 34 iphone xcode boolean nspredicate
我有一个名为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();
}
Run Code Online (Sandbox Code Playgroud)
如果删除在fetchRequest上设置谓词的行,我的代码就会完美执行.
我显然是n00bin在谓词上但是在尝试找出如何从核心数据模型对象对BOOLEAN值执行操作时遇到了很多麻烦.需要注意的是,有关如何使用字符串或int值进行此操作的答案,但我找不到BOOLEAN示例.
非常感谢 !
JWW*_*ker 42
这并不是特定于NSPredicate ...每当你有%@
一个格式字符串时,相应的值必须是一个指向对象的指针,并且BOOL不符合条件.因此,不是传递YES,而是传递[NSNumber numberWithBool: YES]
.
在较新版本的Xcode和SDK中,比我最初编写答案时,您可以使用@YES
而不是[NSNumber numberWithBool: YES]
.
sci*_*lot 30
来自Apple的文档:
布尔值
您可以指定并测试布尔值的相等性,如以下示例所示:
NSPredicate *newPredicate =
[NSPredicate predicateWithFormat:@"anAttribute == %@", [NSNumber numberWithBool:aBool]];
NSPredicate *testForTrue =
[NSPredicate predicateWithFormat:@"anAttribute == YES"];
Run Code Online (Sandbox Code Playgroud)
然而,有些事情让我感到困惑:
一定要取消选中Optional
实体的属性和设置Default Value
的YES
或NO
,否则列将是空(NULL?)和上述谓词将不匹配未明确设置的行.
我通过查看生成的模拟器数据库,使用了很棒的应用程序sqllitebrowser来诊断这个.
wre*_*ees 25
如果你知道你正在寻找是(因此不需要在不同情况下在YES或NO之间切换),这对我有用:
[NSPredicate predicateWithFormat:@"isFavorite == 1"]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
34349 次 |
最近记录: |