6

これは特別な注意が必要な問題だと思います... 私の Google-fu はかなり良いのですが、役に立つものは何も得られませんでした。

これは最も単純なことですが、何が問題なのかわかりません。

私は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)」だけでなく、追加のデバッグ情報で返信している他の人もいます。どうすればこれを入手できますか?)

ありがとう!

4

1 に答える 1

18

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

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[_form selectRowAtIndexPath:indexPath animated:YES scrollPosition:YES];
于 2012-03-10T08:33:36.433 に答える