And*_*rew 1 iphone objective-c nsmutablearray
我无法弄清楚造成这种情况的原因.基本上,一些不同的"任务"在我的应用程序中相互冲突.当我按下按钮时,它运行此代码就好了:
PalAppDelegate *dataCenter = (PalAppDelegate *)[[UIApplication sharedApplication] delegate];
[dataCenter.colourPalettesContainer addObject:[NSNumber numberWithInt:5]];
Run Code Online (Sandbox Code Playgroud)
它可以像我喜欢的那样多次这样做.但是,当我执行另一项任务(以及导致这种情况发生的一些任务)时,这涉及此代码:
PalAppDelegate *dataCenter = (PalAppDelegate *)[[UIApplication sharedApplication] delegate];
[dataCenter.colourPalettesContainer removeObjectAtIndex:touchDownID];
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setObject:dataCenter.colourPalettesContainer forKey:@"container"];
[prefs synchronize];
Run Code Online (Sandbox Code Playgroud)
然后:
dataCenter.colourPalettesContainer = [prefs objectForKey:@"container"];
Run Code Online (Sandbox Code Playgroud)
当我在此之后再次运行第一个代码时,它会导致"发送到不可变对象的变异方法"错误.我怎么能阻止这个?
编辑:所以我从下面的一些答案中找到了问题.有没有人有不同的做法,他们建议?
NSUserDefaults返回一个不可变数组.当你加载它时,你需要制作一个可变的副本:
NSMutableArray *mutableArray = [[prefs objectForKey:@"container"] mutableCopy];
dataCenter.colourPalettesContainer = mutableArray;
[mutableArray release];
Run Code Online (Sandbox Code Playgroud)
您可能还需要在数组内部进行一些操作,因为您在其中存储了NSMutableArrays.
| 归档时间: |
|
| 查看次数: |
1689 次 |
| 最近记录: |