ios - 无法排序我的NSMutablearray

标签 ios sorting nsmutablearray alphabetical

因此,我使用以下代码对我的NSMutableArray按字母顺序进行排序,并且效果很好。

[myArray sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)];

但这正在对我的数组做一些事情,因为在下一行之后它崩溃后我无法添加它
[myArray addObject:textBox.text];

我收到以下错误
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[__NSCFArray insertObject:atIndex:]: mutating method sent to immutable object'

我知道它与排序功能有关,因为仅当我修改可变数组时才会出现此问题!谁能理解为什么会这样?

不知道为什么说它是一个不变的对象,绝对是我正在使用的mutableArray。
@property (strong, nonatomic) NSMutableArray *myArray;

这是其余的代码
@synthesize myArray;

myArray=[[NSMutableArray alloc] initWithObjects:@"numberOne",@"numberTwo",@"numberThree",@"numberFour",@"numberFive", nil];

NSUserDefault代码
myUserDefault = [NSUserDefaults standardUserDefaults];
myArray = [myUserDefault objectForKey:@"stuff"];
[myUserDefault synchronize];

最佳答案

@property (strong, nonatomic) NSMutableArray *speciesArray;

在这里查看我的答案:

https://stackoverflow.com/a/22748539/341994

实际上,事实是完全一样的。仅仅声明某类是不够的。那个东西实际上必须是那个类(多态性)。实例具有一个类(作为关于它的内部事实),完全不用考虑如何转换或声明仅引用它的变量。

因此,您会发现,尽管实际上是在制造或获取此数组,但它是一个非可变数组(NSArray)。仅仅声称它是可变的,就像您正在做的那样,并不会做到这一点。事实具有自己的力量。

编辑:事实确实如此。您实际上是在说:
myArray = [[NSUserDefaults standardUserDefaults] objectForKey:@"stuff"];

现在,无论您如何声明myArraymyArray都是不可变的数组。解决方法是执行mutableCopy:
myArray = [[[NSUserDefaults standardUserDefaults] objectForKey:@"stuff"] mutableCopy];

关于ios - 无法排序我的NSMutablearray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22752080/

相关文章:

iOS 7 : UITableViewController: Changing/Replacing Delete Button

ios - 如何测试 NSMutableArray 中是否有 _NSCFConstantString?

ios - ATS应用程序传输安全: HTTP url inside Webview

objective-c - 在 NSMutableArray 中找到一个不靠近任何整数的整数

ios - 难以本地化 xib 文件

postgresql - postgres hierarchy - 子级别的计数并按子级或孙级的日期排序

序言插入排序

wpf - 如何仅使用 XAML 而不使用隐藏代码对 ListBox 进行排序?

objective-c - 插入对象 : atIndex: - index 3 beyond bounds for empty array

objective-c - 自定义类副本的 NSMutableArray