arrays - 使用描述符对 NSArray 进行排序
问题描述
我有两个数组,我想按名称和别名打印值。它们是 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.
解决方案
错误消息告诉您出了什么问题:
[<VBAnimal 0x6000002520f0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key name.
当你使用 时-sortedArrayUsingDescriptors:
,NSArray
使用你给它的键从它比较的对象中获取值,以决定如何对对象进行排序。如果它不能从第一个描述符确定顺序(因为对象返回的值相同),它会继续下一个描述符,直到它确定顺序或用完描述符。
因此,当您对数组进行排序时,NSArray
从第一个键开始,即@"name"
. 如果您的VBAnimal
类不符合 KVC 的 key @"name"
,那么您将收到上述错误。对于给定的键,至少有三种实现键值编码的方法:
- 提供一个名称与键匹配的方法并让它返回一个值
- 添加名称与键匹配的属性
- 实现
valueForKey:
,使其返回键的值
你需要为你的VBAnimal
班级做这两个中的一个。
推荐阅读
- angular - 有没有什么聪明的方法可以在 ngrx 角度应用程序中保持以前的减速器状态?
- php - Hw在laravel中以3个字母格式化月份
- java - ANDROID - How to use google maps in drawer menu?
- python - 在 group by 期间创建按列排序的值列表
- python-3.x - 当您访问 django 中的视图时,是否有一个函数被调用
- python - 在 Python Selenium 中为不同的 mat-select 选项选择/定位定位器的问题
- ruby - gem install ffi-yajl 导致“未定义的方法 include_path”错误
- javascript - OnMouseEnter 和 OnMouseLeave 是在退出一个项目并进入另一个项目时异步调用的吗?
- html - flexbox的特定定位问题
- java - 如何使用 Smack 4 解析 Muc Sub 事件包