1

我正在开发 uitableview,当我在 uitableviewcell 中使用自定义 uiviewcontroller 时,我遇到了随机崩溃。

static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(!cell){
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    SuspectSalesResponse* r = [valueArray objectAtIndex:indexPath.row];
    SuspectSalesCellViewController* scellView = [[SuspectSalesCellViewController alloc]initWithNibName:@"SuspectSalesCellViewController" bundle:nil cellData:r];
    if(![cellViewArray containsObject:scellView])        
       [cellViewArray addObject:scellView];
    [cell.contentView addSubview:scellView.view];

}
return cell;

此代码有时有效,有时会出现以下错误:

* -[SuspectSalesHeaderViewController _parentModalViewController]:消息发送到释放实例 0x8556880

我尝试将 contentviews 保存在数组(cellViewArray)中,但运气不好,我仍然收到此错误。我究竟做错了什么?

感谢您的帮助!

4

1 回答 1

3

问题是您不应该在表格单元格中添加视图控制器。您应该尝试从 更改UIViewControllerUIView

崩溃的确切原因是您创建了一个控制器(它有一个视图)并且您正在将视图添加到您的单元格中,但是控制器对象丢失了。当视图向它的父控制器发送任何通知时,控制器已经被解除分配,并且在那里您获得了错误的访问权限。SuspectSales~如果您将您的转换为UIView子类,这将得到解决

编辑 要从 nib 文件加载UIView(或任何子类),您必须首先创建 xib,将视图的类设置为您的类(您在界面构建器的第三个选项卡中执行此操作)。

之后,您可以使用以下代码加载它:

某些实用程序类中的通用函数

+ (id)loadNibNamed:(NSString *)nibName ofClass:(Class)objClass {
    if (nibName && objClass) {
        NSArray *objects = [[NSBundle mainBundle] loadNibNamed:nibName owner:nil options:nil];

        for (id currentObject in objects ){
            if ([currentObject isKindOfClass:objClass])
                return currentObject;
        }
    }

    return nil;
}

在你的课堂上:

Subclass *view = [UtilityClass loadNibNamed:@"Subclass" ofClass:[Subclass class]];
于 2013-01-28T13:35:15.467 回答