布尔值的 NSPredicate
NSPredicate for a boolean
我在一个实体上有一个布尔属性,为它生成的代码是:
@property (nonatomic, retain) NSNumber * countdownMode;
@dynamic countdownMode;
实体保存为:
score.countdownMode = @(YES);
fetchRequest 具有以下谓词:
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"countdownMode == YES"];
出于某种原因,提取从来没有 returns 任何东西..有什么想法吗?删除谓词时,将提取行。在调试器中,我可以看到 countdownMode 是 1。我也试过这些但没有成功:
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"countdownMode == %@", @YES];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"countdownMode == %d", YES];
这看起来应该很简单,但它没有返回任何结果。感谢帮助。
不建议将布尔值显式地与 YES 进行比较。因此试试这个案例:
BOOL yes = YES;
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"countDownMode == %@", [NSNumber numberWithBool:yes]];
所有这些是完全等价的。
@"count = 1"
@"count = true"
@"count = YES"
@"count = %@", @YES
@"count = %@", [NSNumber numberWithBool:YES]
// plus all these versions with "=="
None 是最好的,除了简洁和清晰的原因。对SQLite数据库的调用结果完全一样,所以在效果、安全和性能上绝对没有区别。
你看,SQLite数据库正在存储“1”。 (这是一个可能会改变的实现细节,所以不要依赖它。尽管如此,出于所有实际目的,它并不重要)。
还有,@YES
和[NSNumber numberWithBool:YES]
是完全一样的。前者是 "Modern Objective C" 引入的一种新的文字表示法。
由此可见,没有记录的原因一定是不同的。检查您的托管对象上下文是否不是 nil
;如果没有另一个谓词限制结果;如果您显示的结果与您认为已获取的结果不同;如果您在执行提取之前没有无意中更改数据;如果您忘记在正确的地方打电话 save
,等等
我在一个实体上有一个布尔属性,为它生成的代码是:
@property (nonatomic, retain) NSNumber * countdownMode;
@dynamic countdownMode;
实体保存为:
score.countdownMode = @(YES);
fetchRequest 具有以下谓词:
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"countdownMode == YES"];
出于某种原因,提取从来没有 returns 任何东西..有什么想法吗?删除谓词时,将提取行。在调试器中,我可以看到 countdownMode 是 1。我也试过这些但没有成功:
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"countdownMode == %@", @YES];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"countdownMode == %d", YES];
这看起来应该很简单,但它没有返回任何结果。感谢帮助。
不建议将布尔值显式地与 YES 进行比较。因此试试这个案例:
BOOL yes = YES;
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"countDownMode == %@", [NSNumber numberWithBool:yes]];
所有这些是完全等价的。
@"count = 1"
@"count = true"
@"count = YES"
@"count = %@", @YES
@"count = %@", [NSNumber numberWithBool:YES]
// plus all these versions with "=="
None 是最好的,除了简洁和清晰的原因。对SQLite数据库的调用结果完全一样,所以在效果、安全和性能上绝对没有区别。
你看,SQLite数据库正在存储“1”。 (这是一个可能会改变的实现细节,所以不要依赖它。尽管如此,出于所有实际目的,它并不重要)。
还有,@YES
和[NSNumber numberWithBool:YES]
是完全一样的。前者是 "Modern Objective C" 引入的一种新的文字表示法。
由此可见,没有记录的原因一定是不同的。检查您的托管对象上下文是否不是 nil
;如果没有另一个谓词限制结果;如果您显示的结果与您认为已获取的结果不同;如果您在执行提取之前没有无意中更改数据;如果您忘记在正确的地方打电话 save
,等等