2012-03-10 11 views
6

私はこれが特別な注意を必要とする問題だと思っています...私のGoogle-fuはかなり良いですが、何か役に立つことができませんでした。UITableViewのアサーションエラーselectRowAtIndexPath

これは最も簡単なことですが、問題が何であるか把握できないようです。

私はUITableViewを持っています。私のVCが_formと呼ぶサブビューです。私は実際にデータを表示するのではなく、スタイリングの目的に使用しています。それは2つの細胞を持っています。

特定のイベントでは、selectRowAtIndexPath:animated:scrollPositionを使用して別のセルを選択しようとしています。

これを実行すると、SIGABRTSです。

簡単な例:

- (IBAction)submitClicked:(id)sender 
{ 
    [_submit setTitle:@"Wha!?" forState:UIControlStateNormal]; 
    NSIndexPath *row = [NSIndexPath indexPathWithIndex:0]; 
    NSLog(@"%d", [[_form indexPathForSelectedRow] row]); 
    [_form selectRowAtIndexPath:row animated:YES scrollPosition:YES]; 
} 

ボタンのタイトルが変更され、選択された行は、0又は1であるが、所望のセルを選択しようとしている上にあるテーブルプリントは、それがブレーク:

2012-03-09 21:57:39.905 <omitted>[16329:207] 0 
2012-03-09 21:57:39.908 <omitted>[16329:207] *** Assertion failure in -[NSIndexPath row], /SourceCache/UIKit_Sim/UIKit-1912.3/UITableViewSupport.m:2598 
(gdb) 

私の前提は、これは私のテーブルがどのように構成されているかに何か問題があることを意味していますが、私は何がわかりません。 TableView:didSelectRowAtIndexPathの期待される応答が示すように、テーブル内のセルを通常選択(クリック)しています。これ以外は、これ以外のすべての設定が正常に動作します。

(また、私の余分なデバッグ情報を返信する他の人々だけでなく、 "(GDB)"。どうすれば?これを取得することができます)

ありがとう!

答えて

18

tableviewセルのインデックスパスには、行とセクションの両方が必要です。代わりに、このように(NSIndexPath UIKit Additionsで定義されている)ファクトリメソッドを使用して、インデックスパスを作成してみてください:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; 
[_form selectRowAtIndexPath:indexPath animated:YES scrollPosition:YES]; 
+0

おかげで、すごいことにイライラ。それは、コードヒントが私に言い聞かせるものにあまりにも頼るために得られるものです。それは決してそれを示唆しなかった。 > :-( – Liandri