Assertion failure in -[UITableView dequeueReusableCellWithIdentifier:forIndexPath:]
出现这个报错,当时找原因找了半天,网上的资料基本说的是用不用forIndexPath的区别,或者说你没有在前面注册cell。
其实原因都没有找对,或者不适合你的情况。
我出现这个报错导致崩溃的原因是:
我的cell隐藏了分割线,而隐藏分割线的方法写在了创建tableView的时候,而且写在了注册cell方法的前面。
_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, WID, HEI-64) style:UITableViewStyleGrouped];
_tableView.delegate = self;
_tableView.dataSource = self;
_tableView.tableFooterView = [[UIView alloc] init];
_tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
[_tableView registerNib:[UINib nibWithNibName:@"SystemCell" bundle:nil] forCellReuseIdentifier:@"systemCellID"];
[self.view addSubview:_tableView];
这逻辑上是不对的。 因为这是cell的方法,而你在没注册cell之前隐藏cell的分割线,似乎有点说不通。但实际真机上跑确实不行,将其调到注册cell之后就没问题了。如下:
_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, WID, HEI-64) style:UITableViewStyleGrouped];
_tableView.delegate = self;
_tableView.dataSource = self;
_tableView.tableFooterView = [[UIView alloc] init];
[_tableView registerNib:[UINib nibWithNibName:@"SystemCell" bundle:nil] forCellReuseIdentifier:@"systemCellID"];
_tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
[self.view addSubview:_tableView];
所以,最好将隐藏分割线的方法写在
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 此方法里面!
另外,最好不要写在前面的方法还有:
_tableView.sectionHeaderHeight =44;
此方法虽然快捷,但是在tableView类型为UITableViewStyleGrouped的时候,容易引起第一个段头消失,用代理方法写段头高度即可!