【问题标题】:NSMutuableArray sort problemNSMutableArray 排序问题
【发布时间】: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。

标签: iphone objective-c xcode ipad


【解决方案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];仍然得到“无法识别的选择器发送到实例”
猜你喜欢
  • 2013-06-04
  • 2011-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多