0

我有一个包含很多依赖项的大应用程序。对于这种情况,我实现了一个类RootTableViewController来处理每次需要表视图控制器时必须完成的所有事情。

现在我发现了一个无限循环,我不知道如何解决它。我得到以下代码RootTableViewController

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    NSString *sectionTitle = [self tableView:tableView titleForHeaderInSection:section];
    int numbersOfRowInSection = [self.tableView numberOfRowsInSection:section];

    if (numbersOfRowInSection > 0)
    {
         // ...
    }
    else
    {
        UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 28.0f)];
        return view;
    }
}

这在 iOS 5 和 iOS 6 上完美运行,但在 iOS4 上它会导致无限循环,因为[tableView numberOfRowsInSection]正在调用[tableView viewForHeaderInSection]. 如何使用 table view api 解决这个问题?使用内部数据数组对我来说不是解决方案,[ count]因为我有很多表视图控制器RootTableViewController使用不同的数据源扩展它。

4

2 回答 2

1

这根本不是好风格。你应该继承或实现相关的委托方法,但你不应该调用UITableView.numberofRowsInSection:

但是,您肯定已经实现了tableView:numberOfRowsInSection. 将其所有功能移至新方法myNumberOfRowsInSection:在那里做同样的事情。它主要是您当前的numberOfRowsInSection. 然后在您的代码片段调用中[self myNumberOfRowsInSection:...];

在里面tableView:numberOfRowsInSection:section做:

return [self myNumberOfRowsInSection:section]; 

将相同的模式应用于您可能想要自己调用的所有委托方法。将其所有业务逻辑移动到您自己的方法中,然后仅从委托方法和您自己的代码中调用您自己的方法。

于 2013-03-19T19:07:07.783 回答
0

如果您想在不访问内部数据数组的情况下获取数据源部分中的行数,您可以查询dataSource委托,例如

int numbersOfRowInSection = [self.tableView.dataSource tableView:self.tableView numberOfRowsInSection:section];

(未经编译器检查)

于 2013-03-19T15:17:44.077 回答