Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从表视图中删除行| NSUserDefaults+;NSKeyedArchiver_Ios_Uitableview_Nsuserdefaults_Delete Row_Nskeyedarchiver - Fatal编程技术网

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;    }
}