UITableView提交编辑错误

时间:2012-05-22 11:50:52

标签: objective-c ios cocoa-touch

我有一个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
}   
}

1 个答案:

答案 0 :(得分:3)

您的listOfNames实例变量是不可变的,因此您无法从中删除对象。

变化:

listOfNames = [[defaults objectForKey:@"My Key"] copy];

listOfNames = [[defaults objectForKey:@"My Key"] mutableCopy];

在您的-viewWillAppear:viewDidLoad方法中。