对 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 时出现错误“对成员下标的模糊引用”

对大型数组进行排序时出现快速排序错误

Swift 解析 JSON 时出现问题:无法将“__NSCFDictionary”类型的值转换为“NSArray”错误

在 C++ 中对对进行排序时出现内存错误

尝试对链表进行排序时出现左值错误

从 PhpMyAdmin 中对 MySQL 列进行排序时出现 403 禁止错误?