-1

我正在尝试从 a 创建一个键数组NSMutableDictionary,然后按字母顺序对其进行排序。我现在得到的是:

_currentItemsArray = (NSMutableArray *)[_currentItemsDict allKeys];
[_currentItemsArray sortUsingSelector:@selector(caseInsensitiveCompare:)];

但它抛出了一个异常。具体来说:

-[__NSArrayI sortUsingSelector:]: unrecognized selector sent to instance 0x1e54ddb0

我的研究告诉我,这意味着_currentItemsArrayare not的值NSStringNSMutableDictionary但是,当源的键是NSString's时,它们还会是什么?

allKeys无论哪种方式,这是按字母顺序对数组进行排序的最佳方式吗?

4

4 回答 4

1

a 的正确方法NSArraysortedArrayUsingSelector:.

NSArray *sortedKeys = [_currentItemsArray sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
于 2013-06-21T08:38:07.287 回答
1
NSArray *sortedKeys = [[dict allKeys] sortedArrayUsingSelector: @selector(caseInsensitiveCompare:)];

NSLog("%@", sortedKeys);
于 2013-06-21T08:39:58.680 回答
1

不能简单地将 NSArray 指针转换为 NSMutableArray 指针。你currentItemsArray可能是一个 NSMutableArray,但没有多少 (NSMutableArray *) 强制转换可以使 NSArray 可变。您必须使用 NSArray 方法:

NSArray *array =  [[_currentItemsDict allKeys] sortedArrayUsingSelector:@selector(whatever)];
于 2013-06-21T08:41:02.910 回答
1

-[NSMutableDictionary allKeys]返回一个NSArray. 项目的顺序不是预先确定的,但通常是按字母顺序排列的。无论如何,由于返回值是NSArray您不能使用-sortUsingSelector的,因为此方法仅适用于NSMutableArrays. 您应该改用另一种方法-[NSArray sortedArrayUsingSelector:]

于 2013-06-21T08:41:09.470 回答