【问题标题】:Custom UITableView section header views are breaking自定义 UITableView 部分标题视图正在破坏
【发布时间】:2009-07-21 23:10:39
【问题描述】:

我有一个自定义 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 并因 dosNotRecognizeSelector 异常而崩溃(如果这有所不同,我的 tableview 有 2 个部分)。发生这种情况有什么原因吗?有没有办法阻止它?

【问题讨论】:

    标签: iphone objective-c uitableview uikit


    【解决方案1】:

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

    我的猜测是你的 dataHeader 视图在你想要的之前被释放了。

    【讨论】:

    • 你是对的;那是个问题。实际上,我从重构中留下了一个自动释放。我明天有机会试试,看看能不能解决它:)。
    【解决方案2】:

    问题似乎是您有 2 个部分,而应用程序认为有 4 个部分。这是我调试此问题的方法:

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

    我假设每个标题方法都应该被调用 n 次,其中 n 是表中的节数。我还假设该应用程序询问上述代表 n 是什么。

    2) 每次调用这些委托时,section 的值是多少?

    每个部分应该只有一个调用,除非我遗漏了什么,如果委托被多次调用并使用相同的部分值,我会感到惊讶。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-26
      • 2013-03-14
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-18
      相关资源
      最近更新 更多