我在实体上有一个布尔值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];
这似乎应该很简单,但它不会返回任何结果。感谢帮助。
答案 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]];