从表视图中删除行 | NSUserDefaults + NSKeyedArchiver
Posted
技术标签:
【中文标题】从表视图中删除行 | NSUserDefaults + NSKeyedArchiver【英文标题】:Deleting Rows From Table View | NSUserDefaults + NSKeyedArchiver 【发布时间】:2014-03-16 10:26:18 【问题描述】:- (void)viewWillAppear:(BOOL)animated
[super viewWillAppear:animated];
myFavsTwo = [NSMutableArray arrayWithArray:[NSKeyedUnarchiver unarchiveObjectWithData:[[[NSUserDefaults standardUserDefaults] objectForKey:@"MyFavoritez"] mutableCopy]]];
[self.tableView reloadData];
NSLog(@"Number of items in my array is: %d", [myFavsTwo count]);
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
NSLog(@"Number of items in my array is: %d", indexPath.row+1);
[myFavsTwo removeObjectAtIndex:indexPath.row];
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
[[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:myFavsTwo] forKey:@"MyFavoritez"];
[[NSUserDefaults standardUserDefaults] synchronize];
在删除我的应用程序时不断崩溃:
[[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver
archivedDataWithRootObject:myFavsTwo] forKey:@"MyFavoritez"];
如果我“继续”调试,它仍然可以正常工作,并且一切都照常进行... 没有收到任何错误消息,或者只是一个“断点”消息
我的视图将如下所示:
- (void)viewWillAppear:(BOOL)animated
[super viewWillAppear:animated];
myFavsTwo = [NSKeyedUnarchiver unarchiveObjectWithData:[[[NSUserDefaults standardUserDefaults] objectForKey:@"MyFavoritez"] mutableCopy]];
[self.tableView reloadData];
NSLog(@"Number of items in my array is: %d", [myFavsTwo count]);
信息来自这里:
- (void)buttonPressed:(id) sender
NSMutableArray *myfavs = [[[NSUserDefaults standardUserDefaults] objectForKey:@"MyFavoritez"]mutableCopy];
if(myfavs != nil)
NSLog(@"Array found. Contents: %@",myfavs);
else
myfavs = [[NSMutableArray alloc] initWithCapacity:0];
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
NSData *dataRepresentingSavedArray = [currentDefaults objectForKey:@"MyFavoritez"];
if (dataRepresentingSavedArray != nil)
NSArray *oldSavedArray = [NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSavedArray];
if (oldSavedArray != nil)
_myfavs = [[NSMutableArray alloc] initWithArray:oldSavedArray];
else
_myfavs = [[NSMutableArray alloc] init];
[_myfavs addObject:self.word];
[[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:_myfavs] forKey:@"MyFavoritez"];
[[NSUserDefaults standardUserDefaults] synchronize];
NSLog(@"Number of items in my array is: %d", [_myfavs count]);
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
if ([[segue identifier] isEqualToString:@"passFavs"])
FavViewController *con = segue.destinationViewController;
con.myFavsTwo = _myfavs;
希望那不是 TMI
【问题讨论】:
您是否尝试过这个问题中的建议 - ***.com/questions/4186251/… ?你有一个异常断点吗?我原以为您会收到有关断言失败或类似情况的消息 我删除了这一行:` [myFavsTwo removeObjectAtIndex:indexPath.row];` 然后由于未捕获的异常 'NSInternalInconsistencyException' 而删除给了我这个终止应用程序,原因:'无效更新:无效的行数在第 0 节中。更新后现有节中包含的行数 (4) 必须等于更新前该节中包含的行数 (4),加上或减去从该节中插入或删除的行数节(0 插入,1 删除)并加上或减去移入或移出该节的行数(0 移入,0 移出)。' @Paulw11 我尝试了您给我的链接上的建议,但无济于事 关于不一致的消息是有道理的,因为您正在删除一行但您没有更改基础数据源。您是否在 removeObject 和 deleteRows 调用之前尝试了 [self.tableview beginUpdates] 并在之后尝试了 [self.tableview endUpdates]? @Paulw11 是的,仍然没有错误崩溃......我不知道我做了什么,但我现在修复了它 - 写一个答案,我会给你信用 【参考方案1】:看看这个答案中给出的建议 - crash on deleteRowsAtIndexPaths 特别是用 [self.tableView beginUpdates] 和 [self.tableView endUpdates] 括起对表格视图和数据模型的更新是一种很好的做法
【讨论】:
以上是关于从表视图中删除行 | NSUserDefaults + NSKeyedArchiver的主要内容,如果未能解决你的问题,请参考以下文章