无法对我的NSMutablearray进行排序

时间:2014-03-31 01:04:07

标签: 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];

2 个答案:

答案 0 :(得分:0)

@property (strong, nonatomic) NSMutableArray *speciesArray;

请在此处查看我的回答:

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

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

因此,您会发现,无论您实际上是在创建还是获取此数组,它都是 -mutable数组(NSArray);只是声称它是可变的,正如你所做的那样,不会这样做。事实具有自己的力量。

编辑:事实证明确实如此。实际上,你是这样说的:

myArray = [[NSUserDefaults standardUserDefaults] objectForKey:@"stuff"];

现在myArray是一个不可变数组,无论你如何声明myArray 。解决方法是执行mutableCopy

myArray = [[[NSUserDefaults standardUserDefaults] objectForKey:@"stuff"] mutableCopy];

答案 1 :(得分:0)

使用NSUserDefaults时,返回数组应为NSArray,而不是NSMutableArray

myUserDefault = [NSUserDefaults standardUserDefaults];
myArray = [[NSMutableArray alloc] initWithArray:[myUserDefault objectForKey:@"stuff"]];
[myUserDefault synchronize];