5

tableView で何かを選択するとアプリがクラッシュするという問題が発生しています。これは 100% 再現できるわけではありませんが、比較的頻繁に発生します。

EventListViewController クラス (UITableViewController のサブクラス) 内で何が起こるか、didSelectRowAtIndexPath 関数を上書きします。これは、このクラスでも検索バーを使用しており、検索していないときにのみ選択するようにしたいためです。

コードは次のようになります。

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if(!searching)
        [super tableView:tableView didSelectRowAtIndexPath:indexPath];
}

ただし、クラッシュすると例外が発生し、スーパー関数を呼び出す行で次のメッセージが表示されます。

[EventListViewController tableView:didSelectRowAtIndexPath:]: unrecognized selector sent to instance 0xa648e50

デバッガーでいくつかのものを印刷しましたが、すべて問題ないように見えます。

(lldb) po 0xa648e50
(int) $1 = 174362192 <EventListViewController: 0xa648e50>

(lldb) po self
(EventListViewController *) $2 = 0x0a648e50 <EventListViewController: 0xa648e50>

(lldb) po tableView
(UITableView *) $3 = 0x070fd400 <UITableView: 0x70fd400; frame = (0 0; 320 367); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x6e46750>; contentOffset: {-0, -0}>

(lldb) po indexPath
(NSIndexPath *) $4 = 0x06e8caf0 <NSIndexPath 0x6e8caf0> 2 indexes [1, 1]

(tableView には 2 つのセクションがあり、2 番目のセクションには 2 つのエントリがあります)

誰でも何が起こっているのか考えていますか? さらに情報が必要な場合はお知らせください。

注: さらに調査した結果、これは次の手順で 100 % 再現可能であることがわかりました: 1: アプリをロードし、2 つのエントリのいずれかをクリックします。2: tableView コントローラに戻ります 3: 両方のエントリの下、セルがないはずの空白をタップしますtableViewのdidSelectRowAtIndexPathメソッドが存在しないだけで、tableViewの境界外です

4

1 に答える 1

22

superinの呼び出しtableView:didSelectRowAtIndexPath:は不要です。私の記憶が正しければUITableViewController、そのメソッドのデフォルトの実装は提供されません。したがって、super を呼び出すと、クラッシュが発生します。

于 2012-08-05T22:42:35.423 に答える