我有一个UITableView,其中填充了一个从NSUserDefaults读取的mutablearray。我希望用户能够删除一些存在的项目。以下是特定于编辑方法的代码,这里是整个文件:http://pastebin.com/LmZMWBN9
当我点击“编辑”并删除一个项目时,应用程序崩溃了,我回来了:
由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:' - [__ NSCFArray removeObjectAtIndex:]:发送到不可变对象的变异方法'
我的具体问题是,我在这里做错了什么?
// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle: (UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete) {
// edit list of names
if ([listOfNames count] >= 1) {
[tableView beginUpdates];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
[listOfNames removeObjectAtIndex:[indexPath row]];
// write updated listofnames to nsuserdefaults
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[[NSUserDefaults standardUserDefaults] setObject:listOfNames forKey:@"My Key"];
[defaults synchronize];
if ([listOfNames count] == 0) {
[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
[tableView endUpdates];
}
}
else if (editingStyle == UITableViewCellEditingStyleInsert) {
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
}
}
答案 0 :(得分:3)
您的listOfNames
实例变量是不可变的,因此您无法从中删除对象。
变化:
listOfNames = [[defaults objectForKey:@"My Key"] copy];
到
listOfNames = [[defaults objectForKey:@"My Key"] mutableCopy];
在您的-viewWillAppear:
和viewDidLoad
方法中。