对 NSArray 进行排序时出现 Ios 错误
Posted
技术标签:
【中文标题】对 NSArray 进行排序时出现 Ios 错误【英文标题】:Ios error while sorting an NSArray 【发布时间】:2018-03-08 06:01:33 【问题描述】:当我尝试对数组进行排序时,出现如下异常:
*** 由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[valueForUndefinedKey:]:此类不符合键级别的键值编码。”
要对数组进行排序,我使用以下几行:
NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"levels" ascending:YES];
NSArray *descriptors = [NSArray arrayWithObject: descriptor];
NSArray *reversedLevelIdArray = [levelsDictionary.allKeys sortedArrayUsingDescriptors:descriptors];
levelsDictionary.allKeys
包含如下值:
(2级,1级)
我的代码有什么问题?
【问题讨论】:
【参考方案1】:使用排序描述符...
NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"self" ascending:YES];
NSArray *descriptors = [NSArray arrayWithObject: descriptor];
NSArray *reversedLevelIdArray = [levelsDictionary.allKeys sortedArrayUsingDescriptors:descriptors];
NSLog(@"%@", reversedLevelIdArray);
您可以使用@selector
对数组进行排序...
NSArray *resultArray = [levelsDictionary.allKeys sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
使用比较器....
NSArray *resultArray = [levelsDictionary.allKeys sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2)
return obj2 > obj1;
];
【讨论】:
【参考方案2】:只需使用以下代码对数组进行排序,而不是所有其他代码行..
NSArray *reversedIdArray = [levelsDictionary.allKeys sortedArrayUsingDescriptors:@selector(caseInsensitiveCompare:)];
【讨论】:
【参考方案3】:您正在对字符串进行排序,但它们没有名为 levels
的属性或方法。您应该对值进行排序,例如:
[levelsDictionary.allKeys sortedArrayUsingSelector:@selector(compare:)];
【讨论】:
【参考方案4】:我检查了你的代码,你正在对数据进行排序并访问错误的字典键名。
正如您所说,您的 levelDictionary 包含键名称为“level2”、“level1”等......
NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"levels" 升序:YES];
在此代码中,您将键名用作“级别”是错误的,因为我认为您的字典“级别字典”不包含任何键名作为“级别”。
请尝试使用正确的键名,您的错误将得到解决。
【讨论】:
以上是关于对 NSArray 进行排序时出现 Ios 错误的主要内容,如果未能解决你的问题,请参考以下文章
使用 Array 而不是 NSArray 时出现错误“对成员下标的模糊引用”