我创建了一个包含自定义单元格的表格。当我删除一行时,我遇到了问题。该应用程序崩溃。
以下是代码原因?
#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移出)。'
答案 0 :(得分:0)
在开始更新表之前,将您要删除的项目从_feedItems
数组中删除。