为什么NSArray objectAtIndex:sectionView for sectionView titleForHeaderInSection错误:索引0超出空数组的边界

时间:2012-10-18 03:16:48

标签: iphone objective-c ios uitableview nsarray

太奇怪了:

_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;

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

3 个答案:

答案 0 :(得分: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; 

}

答案 1 :(得分:0)

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

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

    if([_ tableDataSectionTitles count]> 0) {   return [_tableDataSectionTitles objectAtIndex:section]; } 其他 {   return @“默认标题”; }

  3. 在代码中的某处将alloc init数组启用..?可以在ViewDidLoad或init方法中使用。?如果不这样做并尝试。

  4. 如果再遇到任何奇怪的事,请告诉我们。希望它有所帮助.. :)

答案 2 :(得分:0)

嗯,我已经明白了。

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