Xcode 7 UITableViewCellEditingStyleDelete崩溃

时间:2015-09-23 22:09:42

标签: ios uitableview

我创建了一个包含自定义单元格的表格。当我删除一行时,我遇到了问题。该应用程序崩溃。

以下是代码原因?

#import "ViewController.h"
#import "Location.h"
#import "DetailViewController.h"
#import "CustomCell.h"

@interface ViewController ()
{
    HomeModel *_homeModel;
    NSArray *_feedItems;
    Location *_selectedLocation;
}
@end

@implementation ViewController

该表加载了一些从远程MySQL数据库中获取并在每行中导入的元素。

-(void)itemsDownloaded:(NSArray *)items
{
    _feedItems = items;
    [self.listTableView reloadData];
}

#pragma mark Table View Delegate Methods

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return _feedItems.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"BasicCell"; 
    CustomCell *myCell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
}
return myCell;
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    self.listTableView.delegate = self;
    self.listTableView.dataSource = self;

    _feedItems = [[NSArray alloc] init];
    _homeModel = [[HomeModel alloc] init];
    _homeModel.delegate = self;
    [_homeModel downloadItems];
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    _selectedLocation = _feedItems[indexPath.row];
    [self performSegueWithIdentifier:@"detailSegue" sender:self];
}

我以这种方式修改了代码

#pragma mark - UITableViewDataSource

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
     [self.listTableView beginUpdates];
     [self.listTableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
     [self.listTableView endUpdates];
    }
}

现在收到错误:

***由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'无效更新:第0节中的行数无效。更新后的现有部分中包含的行数(5)必须等于更新前该部分中包含的行数(5),加上或减去从该部分插入或删除的行数(插入0,删除1),加上或减去移入或移出该部分的行数( 0移入,0移出)。'

1 个答案:

答案 0 :(得分:0)

在开始更新表之前,将您要删除的项目从_feedItems数组中删除。