を使用して遅延スレッドを起動しましたperformSelector
が、ユーザーは現在のビューで戻るボタンを押すことができ、deallocが呼び出されます。これが発生しても、スレッドが呼び出されているように見えます。これにより、スレッドが書き込もうとしているプロパティが解放されたため、アプリがクラッシュします。これを解決するためにcancelPreviousPerformRequestsWithTarget
、前のリクエストをキャンセルするために電話をかけようとしていますが、機能していないようです。以下は、いくつかのコードスニペットです。
- (void) viewDidLoad {
[self performSelector:@selector(myStopUpdatingLocation) withObject:nil afterDelay:6];
}
- (void)viewWillDisappear:(BOOL)animated {
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(myStopUpdatingLocation) object:nil];
}
私はここで何か間違ったことをしていますか?このメソッドmyStopUpdatingLocation
は、performリクエストを呼び出しているのと同じクラスで定義されています。
もう少し背景。私が実装しようとしている機能は、ユーザーの場所を見つけ、その場所の周りのいくつかの場所をグーグルで検索し、地図上にいくつかの注釈を表示することです。で場所の更新viewDidLoad
を開始しCLLocationManager
ます。タイムアウト内に希望の精度が得られない場合は、6秒後にタイムアウトを組み込み、これを行うためにを使用しperformSelector
ています。ユーザーがビューの[戻る]ボタンをクリックすると、すべてのプロパティが解放されてもこのスレッドが実行され、クラッシュが発生する可能性があります。
前もって感謝します!
ジェームズ