gpt4 book ai didi

ios - KVC - 带点分隔的键值编码 - 不符合 KVC 的异常(exception)

转载 作者:行者123 更新时间:2023-11-28 18:48:03 26 4
gpt4 key购买 nike

@interface MyClass: NSObject
@property NSArray *arr;
@end
@inplementation MyClass
- (instancetype) init
{
if(self = [super init])
{
self.arr = [[NSArray alloc] init];
}
return self;
}
@end
int main(int argc, char *argv[])
{
MyClass *temp = [[MyClass alloc] init];
[temp valueForKey:@"arr.count"]; //count is ivar of NSArray
return 0;
}

然后控制台说

NSExceptions: [MyClass valueForUnfinedKey:] this class is not key value-complaint for the key arr.count

每次我使用点分隔符时,都会出现此异常

我试着搜索网页和阅读菜单,我仍然不知道为什么,有人能帮忙吗?谢谢。

最佳答案

valueForKey: 方法采用单个键(属性或局部变量)名称,它不采用键路径,例如 arr.count

valueForKeyPath: 方法确实采用了关键路径,它实际上是一系列 valueForKey: 调用。请参阅 About Key-Value Coding 中的使用键获取属性值 .

但是由于valueForKey:NSArray 定义的方式,您的示例仍然无法工作:

Returns an array containing the results of invoking valueForKey: using key on each of the array's objects.

所以在你的情况下,如果你尝试 valueForKeyPath:@"arr.count",路径的 arr 部分将返回你的数组,然后 NSArrayvalueForKey: 将尝试获取 count数组的每个元素不会对于数组本身。不是你想要的...

这将我们带到了 Collection Operators它提供了在您的情况下对集合,数组而不是其元素进行操作的关键路径。您需要的集合运算符是 @count 为您提供关键路径 arr.@count,因此您需要调用:

[temp valueForKeyPath:@"arr.@count"]

除非这是学习 KVC 的练习,否则可以缩短为:

temp.arr.count

它没有尝试将 count 应用于数组元素的问题,并返回 NSUInteger 值而不是 NSNumber实例。

HTH

关于ios - KVC - 带点分隔的键值编码 - 不符合 KVC 的异常(exception),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47009495/

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