Amy*_*all 9 core-data nspredicate
我想出了一个使用子查询的解决方案,但我不明白为什么我第一次尝试做的事情没有用.
这是我的数据模型.我正在寻求建议.
我可以将以下内容作为谓词:
[NSPredicate predicateWithFormat:@"ANY conditions.terrain == %@", aTerrainObject];
Run Code Online (Sandbox Code Playgroud)
工作正常,并返回任何一条建议,其中至少有一个条件具有该地形类型.
但是,当我尝试这样做时,它失败了:
[NSPredicate predicateWithFormat:@"ANY conditions.terrain == nil"];
Run Code Online (Sandbox Code Playgroud)
我想要做的是返回任何一条建议,其中至少有一个条件没有设置地形类型.
但是,以下工作正常:
[NSPredicate predicateWithFormat:@"SUBQUERY(conditions, $x, $x.terrain == nil).@count > 0"];
Run Code Online (Sandbox Code Playgroud)
谁能解释为什么,在搜索nil时,我不能使用ANY
语法?
Dav*_*ong 26
任何人都可以解释为什么,在搜索nil时,我不能使用ANY语法?
是的!这是正在发生的事情.
[NSPredicate predicateWithFormat:@"ANY conditions.terrain == nil"];
Run Code Online (Sandbox Code Playgroud)
首先,让我们将其分解为适当的左右表达式:
conditions.terrain
Run Code Online (Sandbox Code Playgroud)
这将通过获取SELF
对象(一个Advice
实例)并请求它来评估valueForKeyPath:@"conditions.terrain"
.此keypath的结果将是一个集合.你基本上是这样做的:
Advice *a = ...;
NSSet *conditions = [a conditions];
NSSet *terrains = [conditions valueForKey:@"terrain"];
Run Code Online (Sandbox Code Playgroud)
所以,你有一组(潜在的)Terrain
实例.现在,我们对Objective-C中的集合了解多少?好吧,有一件事,他们不能包含nil
.它们只能包含对象.这意味着当它执行ANY
谓词的一部分时,它将遍历数组中的项目,并看到它们都不是nil
.
因此,你的谓词失败了.我尝试使用其他一些变体(使用[NSNull null]
而不是nil
等),但它们似乎都没有用.
因此,看起来你使用a SUBQUERY
来解决这个问题就像你能得到的一样好.我强烈建议提交一份详细说明您的期望的错误,并表达您认为这应该有效的原因.
归档时间: |
|
查看次数: |
4704 次 |
最近记录: |