核心数据不等于谓词

svj*_*jim 1 core-data ios

name <> myname
Run Code Online (Sandbox Code Playgroud)

我觉得问这个问题有点愚蠢,但我在子查询中使用上面的谓词。我期望看到名称不等于我的名字的所有行。但是,名称具有 NULL 值的行不会被返回。这是正确的行为吗?

Mar*_*n R 6

是的,这是可以预料的。请参阅“谓词编程指南”中的空值:

比较谓词不与任何带有 null 的值匹配,除了 null ( nil) 或NSNullnull 值(即, ( $value == nil) 返回YES if $valueis nil)。
...
如果要匹配空值,除了其他比较之外,还必须包括特定的测试,...

这意味着如果为 NULL,则 "name = myname""name <> myname"计算结果均为 NO name

您可以将谓词更改为

name <> myname OR name = NULL
Run Code Online (Sandbox Code Playgroud)

涵盖这两种情况。