自定义UITableView节标题视图正在中断

时间:2009-07-21 23:10:40

标签: iphone objective-c uitableview uikit

我有一个自定义的UIView子类,我试图将其用作我的一个分组tableview部分的标题。我在tableViewController中保存该视图的实例,并使用它来返回标题部分的高度以及视图本身。问题是,在reloadData调用的中间,实例变量从UIView变为CALayer会导致崩溃,因为实例有一个特殊的方法来返回它的预期高度。这是崩溃的代码:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{   
    if (section == 0)
    {
        return [self.dataHeader frameHeight];
    }
    return 0.0f; 
}
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    if (section == 0)
    {       
        return self.dataHeader;
    }
    return nil; 
}

我在heightForHeaderInSection方法的if块的第一次返回处设置了一个断点,并且它击中了4次;前三个成功返回dataHeader,而第四个时间显示它是一个CALayer并且崩溃时带有一个doesNotRecognizeSelector异常(我的tableview有两个部分,如果这有所不同)。是否有任何理由发生这种情况,是否有办法阻止它?

2 个答案:

答案 0 :(得分:2)

您的dataHeader初始化代码是什么样的?初始化dataHeader时,您是否正确保留它?

我的猜测是你的dataHeader视图在你预期之前就已经发布了。

答案 1 :(得分:0)

问题似乎是你有两个部分,不知何故应用程序认为有4.这是我将如何调试此问题:

1)什么是numberOfSectionsInTableView返回(是否已实现)?

我假设每个头方法都应调用n次,其中n是表中的节数。我还假设应用程序询问前面提到的代表n是什么。

2)每次调用这些代表时,部分的值是什么?

除非我遗漏了某些内容,否则每个部分应该只有一个调用,如果委托人使用相同的部分值多次调用,我会感到很惊讶。