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".
请尝试使用正确的密钥名称,您的错误将会解决。
当我尝试对数组进行排序时,出现如下异常:
*** 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".
请尝试使用正确的密钥名称,您的错误将会解决。