NSMutableArray 排序问题

Posted

技术标签:

【中文标题】NSMutableArray 排序问题【英文标题】:NSMutuableArray sort problem 【发布时间】:2011-07-28 12:25:07 【问题描述】:

NSMutableArray *labels; 并且已正确填充。

    NSSortDescriptor* sortOrder = [NSSortDescriptor sortDescriptorWithKey: @"self" ascending: NO];
labels = [labels sortedArrayUsingDescriptors: [NSArray arrayWithObject: sortOrder]];    

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[__NSArrayI addObject:]:无法识别的选择器已发送到实例。

即使我在最后一行将 NSArray 更改为 NSMutuableArray,我仍然会收到错误消息。

谢谢

【问题讨论】:

为什么使用“self”作为排序键? 老实说,我只是复制了那段代码,并试图了解整个排序机制。 我现在明白了。自我指的是我要排序的标签。但应该一直在使用 self.text。 【参考方案1】:

不要给它分配相同的数组。如果它是不可变的nsarray。

就这样吧

放你的

   labels as NSMutableArray


NSMutableArray *resultArray;

NSSortDescriptor* sortOrder = [NSSortDescriptor sortDescriptorWithKey: @"self" ascending: NO];


resultArray = [[labels sortedArrayUsingDescriptors: [NSArray arrayWithObject:sortOrder]] mutableCopy];    

self.labels=resultArray;//updated code

NSLog(@"resultArray : %@ \n\n",resultArray);

【讨论】:

为什么不能赋值给原来的数组? 一旦你用 NSArray 创建了对象,那么即使你不能替换它也永远不会改变它的对象。它是不可变的。我最好的想法是使用 NSMutable 数组。 谢谢,但我的标签是 NSMutable。问题是为什么你必须有 resultArray = [[labels sortedArrayUsingDescriptors: [NSArray arrayWithObject:sortOrder]] mutableCopy];而不是标签 = [[labels sortedArrayUsingDescriptors: [NSArray arrayWithObject:sortOrder]] mutableCopy]; [labels sortedArrayUsingDescriptors: [NSArray arrayWithObject:sortOrder]] 这条线将产生 NSArray 即使你的标签数组是一个 NSMutableArray.so 同时对你的标签进行赋值。这将是错误的。所以“mutablecopy”方法将 NSArray 更改为 NSMutableArray。就是这样 我希望你能提出更多问题【参考方案2】:
NSArray * descriptors = [NSArray arrayWithObjects: sortOrder, nil];
labels = [labels sortedArrayUsingDescriptors:descriptors];

这应该对你有用。

【讨论】:

将第二条语句改为 labels = [[labels sortedArrayUsingDescriptors:descriptors] mutableCopy];摆脱不兼容的类型。现在,当标签具有多个元素时,我会收到“无法识别的选择器发送到实例”。 更改为:labels1 = [[labels sortedArrayUsingDescriptors:descriptors] mutableCopy];仍然得到“无法识别的选择器发送到实例”

以上是关于NSMutableArray 排序问题的主要内容,如果未能解决你的问题,请参考以下文章

根据索引将 nsmutablearray 排序为降序

快速从领域中删除对象

如何创建一个新的 ITLibMediaItem 对象?

我如何对 NSMutableArray iphone 进行排序?

如何按升序对 NSMutablearray 进行排序

如何对日期对象的 NSMutableArray 进行排序