尝试删除 NSUserdefault 数组中的表视图行

Posted

技术标签:

【中文标题】尝试删除 NSUserdefault 数组中的表视图行【英文标题】:Trying to delete a table view row in an NSUserdefault array 【发布时间】:2012-04-15 09:07:41 【问题描述】:

我正在尝试删除表格视图中的一行,然后将更新的表格视图保存到 NSUserdefault 中的数组中。它看起来像这样:

 - (void)tableView:(UITableView *)tableView 

 commitEditingStyle:(UITableViewCellEditingStyle)editingStyle

  forRowAtIndexPath:(NSIndexPath *)indexPath 


NSMutableArray *stringsArray = [[NSUserDefaults standardUserDefaults] objectForKey:@"history"];
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSMutableArray *history = [NSMutableArray arrayWithArray:[prefs objectForKey:@"history"]];    
 NSUInteger row = [indexPath row];

 NSUInteger count = [stringsArray count];


 if (row < count) 



    [stringsArray removeObjectAtIndex:row];


  [prefs setObject:history forKey:@"history"];
    [[NSUserDefaults standardUserDefaults] synchronize];
    [tableView reloadData]; 

    NSLog(@"tabort %d", row);
    NSLog(@"tabort %d", count);    
    NSLog(@"tabort %@", stringsArray);

    

    

当我运行它时,我可以删除一行,但它没有被保存,当我尝试删除下一行时,它会出现以下消息:

2012-04-15 11:02:58.704 test220[88546:f803] * 由于应用程序终止 未捕获的异常“NSInternalInconsistencyException”,原因: '-[__NSCFArray removeObjectAtIndex:]: 变异方法发送到 不可变对象'

我做错了什么?

【问题讨论】:

【参考方案1】:

换行试试:

NSMutableArray *stringsArray = [[NSUserDefaults standardUserDefaults] objectForKey:@"history"];

到:

NSMutableArray *stringsArray = [NSMutableArray arrayWithArray: [[NSUserDefaults standardUserDefaults] arrayForKey:@"history"]];

【讨论】:

谢谢。现在它不再崩溃了,但它仍然没有保存到 NSUserdefaults 那是因为你没有对“历史”实例做任何事情。尝试组织流程 - 从 NSUserDefaults 获取您需要的一切,操作数据,最后存储并同步回来。在同步之前检查调试器中的数据

以上是关于尝试删除 NSUserdefault 数组中的表视图行的主要内容,如果未能解决你的问题,请参考以下文章

从选定索引处的表视图中的数组中删除

managedObjectContext 似乎删除了我的 NSUserDefault

3.复杂查询

从对象 JSONB 中的数组中删除元素

删除绑定数组中的一行后刷新表?

iOS 中 关于 NSUserDefault中存储可变数组的问题