NSPredicate一个布尔值

use*_*805 2 core-data objective-c nspredicate nsfetchrequest

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

@property (nonatomic, retain) NSNumber * countdownMode;
@dynamic countdownMode;
Run Code Online (Sandbox Code Playgroud)

实体保存为:

score.countdownMode = @(YES);
Run Code Online (Sandbox Code Playgroud)

fetchRequest具有以下谓词:

fetchRequest.predicate = [NSPredicate predicateWithFormat:@"countdownMode == YES"];
Run Code Online (Sandbox Code Playgroud)

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

fetchRequest.predicate = [NSPredicate predicateWithFormat:@"countdownMode == %@", @YES];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"countdownMode == %d", YES];
Run Code Online (Sandbox Code Playgroud)

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

Mun*_*ndi 5

所有这些完全相同.

@"count = 1"
@"count = true"
@"count = YES"
@"count = %@", @YES
@"count = %@", [NSNumber numberWithBool:YES]
// plus all these versions with "=="
Run Code Online (Sandbox Code Playgroud)

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

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

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

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