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 排序问题的主要内容,如果未能解决你的问题,请参考以下文章