gpt4 book ai didi

objective-c - 在 NSPredicates 中使用关键路径

转载 作者:太空狗 更新时间:2023-10-30 03:57:08 26 4
gpt4 key购买 nike

我有一个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com