从表视图中删除行| NSUserDefaults + NSKeyedArchiver

时间:2014-03-16 10:26:18

标签: ios uitableview nsuserdefaults delete-row nskeyedarchiver

- (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

1 个答案:

答案 0 :(得分:1)

看一下这个答案中给出的建议 - crash on deleteRowsAtIndexPaths特别优雅的做法是使用[self.tableView beginUpdates]和[self.tableView endUpdates]将更新包括在表视图和数据模型中]