2

これら 2 つの呼び出しの間のどこかで、EXC_BAD_ACCESS (コード = 2、アドレス = 0xa) を取得します。

不正なアクセスの一般的な説明は、リリースされたオブジェクトへのアクセスです。NSZombies を有効にしてコンパイルしましたが、何も得られませんでした。ポインターに整数を代入することへの参照を 1 つ見ました... 今朝 (プログラムが動作したとき) から行ったすべての変更を読み通して、何も見つからなかったことを除けば、実行したかもしれません。

スタック フレームには次のリストが表示されます。

- 0 objc_msgsend ... this is where the access violation occurs
- 1 -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:]
- 2 -[UITableView _userSelectRowAtPendingSelectionIndexPath:]
...

これらの uitableview メソッドはどちらも公開されていないため、それらをオーバーライドして何が起こっているのかを確認することはできません。

私は経験豊富な開発者ですが、Xcode と Objective-C にはまったく慣れていないため、この環境で推奨されるデバッグ戦略をいただければ幸いです。

ティア。

4

2 に答える 2

0

翌日まで、自分の質問に対する自分の答えを受け入れさせないのは良いことです. おそらく健全な変更ですが、初期化の変更が実際の原因ではないことがわかりました。@jonathan と @verbumdei のアドバイスを受けていたら、他の誰かがこれを見つけたかもしれません。

willSelectRowAtIndex をコメントアウトすると、すべて正常に機能しました。は?

- (void)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath

生成されたテンプレート コードはメソッド didSelectRowAtIndexPath を提供していましたが、これを単に willSelectRowAtIndexPath に名前を変更しました。ああ!

代わりにこれを試しました:

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath

わずか 1 つの戻り値がもたらす違いには驚くべきものがあります。あぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁ。私はこれで一日を失いました!コンパイラがそれをキャッチせず、このメソッドの最初のバージョンが呼び出されたことに驚いています。しかし、そこにあります。

私と同じくらい怠惰なタイピストが同じ罠に陥った場合に備えて、これを共有しています。

于 2013-05-20T14:27:14.320 に答える