所以我使用以下内容按字母顺序对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];
答案 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];