项目中遇到,在注销后重新登录时,自定义的cell中部分数据无法显示。
最终定位到是重用cell的问题。
原来的代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
//使用自定义的CustomCell
static NSString *CustomCellIdentifier = @"CustomCellIdentifier";
static BOOL nibsRegistered = NO;
if (!nibsRegistered) {
UINib *nib = [UINib nibWithNibName:@"CustomCell" bundle:nil];
[tableView registerNib:nib forCellReuseIdentifier:CustomCellIdentifier];
nibsRegistered = YES;
}
CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CustomCellIdentifier];
if (cell == nil) {
cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CustomCellIdentifier];
}
// Configure the cell.
// to do
return cell;
}
发现注释掉nibsRegistered = YES后,一切正常。
原因是nibsRegistered是一个静态变量,初始化后,在tableview中的值一直为YES,所以不会再通过registerNib方式重新生成cell。
一般情况下不会有问题,但是当出现跳转到其他viewcontroller并重新拉取数据后,这里的table cell实际上是需要重新做一次初始化的。
修改后的代码如下:
static BOOL nibsRegistered = NO;
@implementation ListViewController
-(void)viewWillAppear:(BOOL)animated
{
//保证每次进入都重新注册一次nib
nibsRegistered = NO;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
//使用自定义的CustomCell
static NSString *CustomCellIdentifier = @"CustomCellIdentifier";
//static BOOL nibsRegistered = NO;
if (!nibsRegistered) {
UINib *nib = [UINib nibWithNibName:@"CustomCell" bundle:nil];
[tableView registerNib:nib forCellReuseIdentifier:CustomCellIdentifier];
nibsRegistered = YES;
}
CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CustomCellIdentifier];
if (cell == nil) {
cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CustomCellIdentifier];
}
// Configure the cell.
// to do
return cell;
}