尝试删除 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 数组中的表视图行的主要内容,如果未能解决你的问题,请参考以下文章