- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个 NSDictionary,其中包含(我的自定义)GTPerson 对象。 GTPerson 有一个 NSMutableSet *parents
属性,我在其上使用 @property
和 @synthesize
.
在我的 NSDictionary 中,我想过滤所有没有任何 parent 的 GTPerson 对象,即 parent 的数量为 0。
我正在使用以下代码:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"parents.count = 0"];
NSArray *np = [[people allValues] filteredArrayUsingPredicate:predicate];
当我执行此操作时,我收到以下错误:
[<GTPerson 0x18e300> valueForUndefinedKey:]: this class is not key value coding-compliant for the key count.
Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<GTPerson 0x18e300> valueForUndefinedKey:]: this class is not key value coding-compliant for the key count.'
为什么要尝试调用 count
在 GTPerson 而不是它的 parents
属性?
最佳答案
您的问题的解决方案是使用 @"parents.@count == 0"
中的运算符 @count
。
阅读异常我们看到评估谓词将消息 -count
发送到 GTPerson 对象。为什么?
将 -valueForKey:
发送到一个集合(在您的例子中,该集合是 NSSet,它是评估键路径的 parents
组件的结果)发送 -valueForKey:
到集合中的每个对象。
在这种情况下,导致 -valueForKey: @"count"
被发送到每个 GTPerson 实例,并且 GTPerson 不符合计数的键值编码。
相反,当您想要集合的计数时,使用 @count
运算符来计算集合的计数,而不是对所有键 count
的值集合中的对象。
关于objective-c - 在 NSPredicates 中使用关键路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1213081/
1.最小生成树:无向连通图的所有生成树中有一棵边的权值总和最小的生成树 1.1 问题背景: 假设要在n个城市之间建立通信联络网,则连通n个城市只需要n—1条线路。这时,自然会考虑这样一个问题,如何
我是一名优秀的程序员,十分优秀!