Ios 从表视图中删除行| NSUserDefaults+;NSKeyedArchiver
删除时,我的应用程序在以下位置持续崩溃:Ios 从表视图中删除行| NSUserDefaults+;NSKeyedArchiver,ios,uitableview,nsuserdefaults,delete-row,nskeyedarchiver,Ios,Uitableview,Nsuserdefaults,Delete Row,Nskeyedarchiver,删除时,我的应用程序在以下位置持续崩溃: - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; myFavsTwo = [NSMutableArray arrayWithArray:[NSKeyedUnarchiver unarchiveObjectWithData:[[[NSUserDefaults standardUserDefaults] objectForKey:@"MyFavor
- (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]);
}
希望这不是TMI看看这个答案中给出的建议-尤其是将您对表视图和数据模型的更新括在[self.tableView beginUpdates]和[self.tableView endUpdates]中是一个很好的做法。您尝试过这个问题中的建议了吗?您是否有一个异常断点?我本以为您会收到一条关于断言失败或类似情况的消息,我删除了这一行:`[myFavsTwo removeObjectAtIndex:indexPath.row];`由于未捕获的异常“NSInternalInconsistencyException”,删除给了我这个终止的应用程序,原因是:“无效更新:节0中的行数无效。”。更新(4)后现有节中包含的行数必须等于更新(4)前该节中包含的行数,加上或减去从该节中插入或删除的行数(0插入,1删除),加上或减去移入或移出该节的行数(0移入,0移出)“@Paulw11我尝试了你给我的链接上的建议,但无效。关于不一致性的消息是有意义的,因为你正在删除一行,但没有更改基础数据源。你在removeObject和deleteRows调用之前尝试过[self.tableview BeginUpdate]吗?在removeObject和deleteRows调用之后尝试过[self.tableview EndUpdate]吗?@Paulw11是的,仍然没有崩溃错误……我不知道我做了什么,但我现在已经修复了——写一个答案,我会给你评分
- (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; }
}