【发布时间】:2015-03-17 06:08:04
【问题描述】:
我发现错误Terminating app due to unaught exception 'NSInternalInconsistencyException', reason: '-[__NSCFArray insertObject:atIndex:]: mutating method sent to immutable object' 当我将对象添加到可变对象时第二次数组第一次添加成功,但第二次它崩溃了应用程序我认为当我将对象添加到数组时有问题。 下面的代码是崩溃的。
- (void) viewWillAppear:(BOOL)animated
{
if ([defaults objectForKey:@"Groups"] != nil)
{
NSLog(@"not nil defaults.");
arrGroups = (NSMutableArray *)[defaults objectForKey:@"Groups"];
}
else
{
NSLog(@"nil defaults.");
arrGroups = [[NSMutableArray alloc] init];
}
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
NSLog(@"button index == %ld",(long)buttonIndex);
//txtCategory = [[alertView textFieldAtIndex:0] text];
if (buttonIndex == 1)
{
//[self addingCategory:self];
NSLog(@"Adding Group name = %@",[[alertView textFieldAtIndex:0]text]);
[arrGroups addObject:[[alertView textFieldAtIndex:0]text]]; **//Crash here! at the time of add second object or also when i remove first object**
NSLog(@"Added to array.");
[defaults setObject:arrGroups forKey:@"Groups"];
[defaults synchronize];
//[defaults release];
[tblGroups reloadData];
}
}
当我当时删除第一个对象时,我将 userdefault 替换为更新的数组,所以我认为没有问题。我没有找到导致崩溃的适当原因。
所以请支持我了解我的问题或解决方案,但不了解问题我无法理解解决方案,所以请任何人告诉我为什么会发生这种情况。
谢谢。
【问题讨论】:
-
defaults 已经有一些数据了吗?是字典吗?
-
不,它是一个 NSUserDefaults,现在我解决了这个问题,但最终不明白为什么会这样,如果你发现了,而不仅仅是告诉我我在湖边做什么。
-
如何将数据复制到 arrGroups 是可变数组还是不可变数组?
-
也许你应该使用 mutableCopy 方法。
-
感谢您的帮助。
标签: ios objective-c nsmutablearray nsuserdefaults