解决bug:Assertion failure in -[UITableView _configureCellForDisplay:forIndexPath:]

工程启动之后,是正常显示的,一旦上拉刷新之后就崩溃了。

以前这样写是没问题的啊 = =

代码如下:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
    if (self.selected) {
        
        static NSString *identifier = @"cell1";
        ChooseTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
        
        if (cell == nil) {
            cell = [[ChooseTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
        }
        
        cell.backgroundColor = [UIColor redColor];
        
        return cell;
        
    } else {
        
        static NSString *identifier = @"cell2";
        UpTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
        
        if (cell == nil) {
            cell = [[UpTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
        }
        
        cell.backgroundColor = [UIColor cyanColor];
        
        return cell;
        
    }
    
    return nil;
}

错误提示:

Assertion failure in -[UITableView _configureCellForDisplay:forIndexPath:]

原因:

因为 cellForRowAtIndexPath 正在返回一个 nil 值,而
configureCellForDisplay 希望返回一个 UITableViewCell 值。

解决办法:

返回一个 UITableViewCell 值即可。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
    // **添加一个 UITableViewCell 类型,最后返回 cell 即可。**

    static NSString *identifier = @"cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
    
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
    }
    
    cell.backgroundColor = [UIColor yellowColor];
    
    
    if (self.selected) {
        
        static NSString *identifier = @"cell1";
        ChooseTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
        
        if (cell == nil) {
            cell = [[ChooseTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
        }
        
        cell.backgroundColor = [UIColor redColor];
        
        return cell;
        
    } else {
        
        static NSString *identifier = @"cell2";
        UpTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
        
        if (cell == nil) {
            cell = [[UpTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
        }
        
        cell.backgroundColor = [UIColor cyanColor];
        
        return cell;
        
    }
    
    return cell;
}

参考链接:

Assertion failure in -[UITableView _configureCellForDisplay:forIndexPath:]

你可能感兴趣的:(解决bug:Assertion failure in -[UITableView _configureCellForDisplay:forIndexPath:])