2013-03-19 72 views
0

我收到了一个包含很多依赖项的大应用程序。对于这种情况,我实现了一个名为RootTableViewController的类来处理所有必须在每次需要表视图控制器时执行的操作。tableView numberOfRowsInSection在iOS4上调用tableView viewForHeaderInSection

现在我发现了一个无限循环,我不知道如何解决它。我在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]。我怎样才能解决这个使用表视图API?它没有解决方案,我与[ count]的内部数据阵列工作,因为我有很多表视图控制器扩展此RootTableViewController与不同的数据源。

回答

0

如果你想获得行的数据源的段数,而无需访问内部数据数组,你可以查询dataSource委托它,像

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

(未编译器检查)

+0

这将工作。在大多数情况下,self.talbeView.dataSource和self.tableView.delegate将指向自己:) – 2013-03-19 19:08:30

1

这是根本不好的风格。你应该继承或推广相关的代理方法,但你应该不要致电UITableView.numberofRowsInSection:

但是,你当然已经实施了tableView:numberOfRowsInSection。将其所有功能移至新方法myNumberOfRowsInSection:在那里也是这样。它主要是您当前的numberOfRowsInSection的副本。 然后在你这里的代码sniplet调用[self myNumberOfRowsInSection:...];

并在tableView:numberOfRowsInSection:section只是做:

return [self myNumberOfRowsInSection:section]; 

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

相关问题