删除最后一个UITableViewCell时出错

时间:2014-09-18 14:20:09

标签: ios objective-c uitableview

我有以下代码填充我的tableview:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if (friendsArray.count > 0)
    {
        return friendsArray.count;
    }
    return 1;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if(cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
        [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
    }
    if (friendsArray.count <= 0)
    {
        cell.textLabel.text = @"It is lonely here";
        cell.detailTextLabel.text = @"Please add some friends";
    }
    else
    {
        Friend *friend = [friendsArray objectAtIndex:indexPath.row];
        cell.textLabel.text = friend.name;
        cell.detailTextLabel.text = friend.email;
    }
    return cell;
}

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        [tableView beginUpdates];
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:UITableViewRowAnimationTop];
        FriendDelete *friendDelete = [FriendDelete new];
        friendDelete.FDDelegate = self;
        Friend *friend = [friendsArray objectAtIndex:indexPath.row];
        [friendDelete deleteFriend:friend.requestId];
        [app showLoader:@"Deleting.."];
    }
}

为了删除委托电话中的朋友,我写了:

- (void)friendDeleteSuccessfull:(NSString *)userId
{
    [app hideLoader];
    [app dispToast:@"Deleted Friend"];
    for (Friend *friend in friendsArray)
    {
        if ([friend.userId isEqualToString:userId])
        {
            NSInteger row = [friendsArray indexOfObject:friend];
            [friendsArray removeObjectAtIndex:row];
            [friendListTable endUpdates];
            [friendListTable reloadData];
            break;
        }
    }
}

这一切都很好,直到我到达最后一行。当我尝试删除表的最后一行时,应用程序崩溃并出现以下错误:

Assertion failure in -[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit_Sim/UIKit-3318/UITableView.m:1582

因此更改了代码,以便仅在数组有任何值时调用endUpdates,否则通过添加以下条件直接调用reloadData

if (friendsArray.count > 0) {
   [friendListTable endUpdates];
}

现在最后一行删除没有崩溃,但表仍显示最后一行。也就是说,表格根本没有重新加载。可能是什么问题。我该如何解决?

1 个答案:

答案 0 :(得分:1)

尝试在

中写下[tableView reloadData]
if(friendsArray.count > 0){
    [friendListTable endUpdates];
    [tableView_object reloadData];
}