我有两个数组,我想按名称和别名打印值。 它们是NSString值。
我是obj-c的初学者。 我将很高兴为您提供任何帮助。
我将添加您需要了解问题原因的所有内容,谢谢!
NSArray <VBHuman*> * arrayOfHumans = [NSArray arrayWithObjects:
human, cycler, runner, swimmer, boxer,
nil];
NSArray <VBAnimal*> * arrayOfAnimals = [NSArray arrayWithObjects:
animal, dog, cat, hamster,
nil];
NSArray* newArray = @[];
newArray = [newArray arrayByAddingObjectsFromArray:arrayOfHumans];
newArray = [newArray arrayByAddingObjectsFromArray:arrayOfAnimals];
[newArray sortedArrayUsingDescriptors:
@[
[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES],
[NSSortDescriptor sortDescriptorWithKey:@"alias" ascending:YES]
]];
结果不起作用,其类型如下:
[<VBAnimal 0x6000002520f0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key name.
答案 0 :(得分:1)
错误消息告诉您出了什么问题:
[<VBAnimal 0x6000002520f0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key name.
使用-sortedArrayUsingDescriptors:
时,NSArray
使用您提供的键从要比较的对象中获取值,以决定如何排序对象。如果无法确定第一个描述符的顺序(因为对象返回的值相同),它将继续使用下一个描述符,直到确定顺序或描述符用完为止。
因此,当您对数组进行排序时,NSArray
以第一个键(即@"name"
)开头。如果您的VBAnimal
类不支持键@"name"
的KVC,那么您将得到上面的错误。至少有三种方法可以为给定密钥实现键值编码:
valueForKey:
,使其返回键的值您需要为VBAnimal
类做这两个操作之一。