Ios 对 NSArray 进行排序时出错

Ios error while sorting an NSArray

当我尝试对数组进行排序时,出现如下异常:

*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[ valueForUndefinedKey:]: this class is not key value coding-compliant for the key levels.'

为了对数组进行排序,我使用以下行:

NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"levels" ascending:YES];
NSArray *descriptors = [NSArray arrayWithObject: descriptor];

NSArray *reversedLevelIdArray = [levelsDictionary.allKeys sortedArrayUsingDescriptors:descriptors];

levelsDictionary.allKeys 包含如下值:

( level2, level1 )

我的代码有什么问题?

您正在对字符串进行排序,但它们没有 属性 或名为 levels 的方法。您应该改为对值进行排序,例如:

[levelsDictionary.allKeys sortedArrayUsingSelector:@selector(compare:)];

只需使用以下代码对数组进行排序,而不是所有其他代码行..

NSArray *reversedIdArray = [levelsDictionary.allKeys sortedArrayUsingDescriptors:@selector(caseInsensitiveCompare:)];

使用排序描述符...

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;
}];

我检查了你的代码,你正在对数据进行排序并访问了错误的字典键名。

正如您所说,您的 levelDictionary 包含键名 "level2"、"level1" 等....

NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"levels" ascending:YES];

在此代码中,您使用的键名 "levels" 是错误的,因为我认为您的字典 "levelsDictionary" 不包含任何键名 "levels".

请尝试使用正确的密钥名称,您的错误将会解决。