NSPredicate一个布尔值

时间:2015-01-27 16:58:10

标签: objective-c core-data nspredicate nsfetchrequest

我在实体上有一个布尔值attr,生成的代码是:

@property (nonatomic, retain) NSNumber * countdownMode;
@dynamic countdownMode;

实体保存为:

score.countdownMode = @(YES);

fetchRequest具有以下谓词:

fetchRequest.predicate = [NSPredicate predicateWithFormat:@"countdownMode == YES"];

由于某种原因,获取永远不会返回任何东西..任何想法?删除谓词后,将获取行。在调试器中我可以看到countdownMode是1.我也尝试过这些并没有成功:

fetchRequest.predicate = [NSPredicate predicateWithFormat:@"countdownMode == %@", @YES];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"countdownMode == %d", YES];

这似乎应该很简单,但它不会返回任何结果。感谢帮助。

2 个答案:

答案 0 :(得分:5)

全部这些完全相同。

@"count = 1"
@"count = true"
@"count = YES"
@"count = %@", @YES
@"count = %@", [NSNumber numberWithBool:YES]
// plus all these versions with "=="

除了简洁和清晰的原因之外,这些都不是优选的。对SQLite数据库的调用结果将完全相同,因此在效果,安全性或性能方面绝对没有区别。

看一下,SQLite数据库存储“1”。 (这是一个可以改变的实现细节,所以不要依赖它。但是,出于所有实际目的,它并不重要)。

此外,@YES[NSNumber numberWithBool:YES]完全相同。前者是“现代目标C”引入的一种新的文字符号形式。

接下来,没有记录的原因必须是不同的。检查您的托管对象上下文是否不是nil;如果没有另一个谓词限制结果;如果你显示的结果与你认为你获得的结果不同;如果在执行获取之前没有意外更改数据;如果您忘记在正确的地方致电save等等。

答案 1 :(得分:1)

建议不要将布尔值与YES明确比较。因此尝试这种情况:

BOOL yes = YES;
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"countDownMode == %@", [NSNumber numberWithBool:yes]];