1

太诡异了:

_tableDataSectionTitles 是这个 UITableViewController 子类和 NSArray 的一个属性。

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
NSLog(@"%@", _tableDataSectionTitles); // returns: ( "string" )
NSLog(@"%@", [_tableDataSectionTitles objectAtIndex:0]); // returns: "string"
NSLog(@"%i", section); // returns 0
NSLog(@"%@", [_tableDataSectionTitles objectAtIndex:section]; // returns "string"
return [_tableDataSectionTitles objectAtIndex:section]; // returns: *** -[__NSArrayI objectAtIndex:]: index 0 beyond bounds for empty array

那是怎么回事!?(其他一切工作正常。我检查了三次。)(说真的,这就像它运行的第一件事,所以这里应该没有错)

即使使用数组,我也试过了:

NSString *rep = [[NSString alloc] init];
if (section == 0) {
    rep = @"Stuff";
} else { // doesn't even need it - it won't run through it anyway
    //rep = [_tableDataSectionTitles objectAtIndex:section]; // commented out just to not have any doubts
}
return rep;

但仍然是同样的错误。帮助!

4

3 回答 3

0

下面的代码将帮助您轻松检测代码的错误部分

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {

  NSString *title = @"Empty";

  NSLog(@"count: %d", [_tableDataSectionTitles count]); 
  NSLog(@"section: %d", section);

  if([_tableDataSectionTitles count] > section)
      title = [_tableDataSectionTitles objectAtIndex:section]

  return title; 

}
于 2012-10-18T03:46:09.357 回答
0

显然,错误说明了[__NSArrayI objectAtIndex:]: index 0 beyond bounds for empty array 意思,数组是空的,即使它不应该是。所以我不确定到底是什么问题,但您可以按照以下步骤调试问题,

  1. 检查它是否仅发生在第 0 部分。不要将部分传递给 objectAtIndex,而是传递 0 并尝试。
  2. 仅当数组不为空时才返回标题,

    if([_tableDataSectionTitles count] > 0) { return [_tableDataSectionTitles objectAtIndex:section]; } else { return @"默认标题"; }

  3. 在代码中的某处分配了初始化数组..?可能在 ViewDidLoad 或 init 方法中。如果不这样做并尝试。

如果您再次遇到任何奇怪的事情,请告诉我们。希望能帮助到你..:)

于 2012-10-18T05:24:44.013 回答
0

嗯,我明白了。

因此,事实证明我的 _tableDataSectionContents 数组是空的,而 _tableDataSectionTitles 中有一个。所以,我仍然不明白为什么它会引发一个完全独立的数组的错误,但它现在可以工作了!感谢你的帮助。

于 2012-10-18T15:05:37.333 回答