1

私のアプリでは、ユーザーの位置を取得し、リバース ジオコーダーを実行します。同時に、ユーザーはメモを書くことができます。アプリをデバッグして実行すると、次のメッセージが表示されることがあります。

*** -[MyViewController respondsToSelector:]: message sent to deallocated instance 0x61a6920

これを解決することはできませんが、ジオローカリゼーションを無効にしても問題は発生しないことに気付きました (少なくとも今までは)。そのため、ジオローカリゼーションがオンになると、リバース ジオコーダー (別のスレッド) は、コントローラーが既に割り当て解除されているときに戻ることができると考えました。それは可能でしょうか?その場合、どうすれば回避できますか?

ありがとう、

フラン

4

1 に答える 1

3

リバース ジオコーディングのような非同期プロセスのデリゲートが、そのプロセスの下から解放される可能性は十分にあります (実際、かなり一般的なエラーです)。それが起こると、(この場合) ジオコーダーは、ご覧のように、割り当てが解除されたデリゲート オブジェクトでデリゲート メソッドを喜んで呼び出します。

MKReverseGeocoder方法があるのはそのため-cancelです。-(void)deallocジオコーダー デリゲートとして使用しているクラスでそれを呼び出したいとします。また、ジオコーダーのデリゲートを に設定することもできますnil

これは、ジオコーダーへのハンドルを維持するために、名前付き/合成されたプロパティをそのクラスに追加する必要があることを意味する可能性が非常に高いです。そのため、dealloc メソッドで「キャンセル」と言う必要があります。

于 2011-01-28T13:15:33.173 に答える