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

なにそれ!? (他のすべては正常に動作しています。チェックしました。3 回確認しました。) (真剣に、これは最初に通過するようなものなので、ここでは何も問題はありません)

また、配列を使用せずに試しました:

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

さて、私はそれを手に入れました。

したがって、_tableDataSectionTitles には配列が含まれていましたが、_tableDataSectionContents 配列は空でした。そのため、完全に別の配列でエラーが発生した理由はまだわかりませんが、現在は機能しています! ご助力いただきありがとうございます。

于 2012-10-18T15:05:37.333 に答える
0

明らかに、エラーは[__NSArrayI objectAtIndex:]: index 0 beyond bounds for empty array 、配列が空であってはならないにもかかわらず空であることを意味します。そのため、問題が正確に何であるかはわかりませんが、次の手順に従って問題をデバッグできます。

  1. セクション 0 でのみ発生しているかどうかを確認します。セクションを objectAtIndex に渡す代わりに、0 を渡して試してください。
  2. 配列が空でない場合にのみタイトルを返します。

    if([_tableDataSectionTitles カウント] > 0) { return [_tableDataSectionTitles objectAtIndex:section]; } else { return @"デフォルトのタイトル"; }

  3. コードのどこかに配列を初期化する割り当てがあります..? ViewDidLoad または init メソッドで使用できます。そうでない場合は、試してみてください。

また何か変なことがあったら教えてください。それが役に立てば幸い..:)

于 2012-10-18T05:24:44.013 に答える