0

ホームボタンが押されてから数秒後にスローされる例外を理解するのに苦労しています。

*** Terminating app due to uncaught exception 'NSDestinationInvalidException', reason: '*** -[GMMLoader performSelector:onThread:withObject:waitUntilDone:modes:]: target thread exited while waiting for the perform'

Web サービスを使用してさまざまなデータセットをロードするアプリケーションをプログラミングしています。Web サービスが operationQueue に追加されます。

WebService* op = 
    [[WebService alloc] initWithSearchString:self.searchBar.text
      notificationCenter:self.progressNotification];
    [self.queue addOperation:op];

[op addObserver:self 
         forKeyPath:@"isFinished" 
            options:NSKeyValueObservingOptionNew 
            context:NULL];

[op release];

Web サービスの-(void) startメッセージで、この開始セレクターを呼び出してメイン スレッドで実行し、UI と対話できるようにします。

- (void)start
{
    if (![NSThread isMainThread]){

        [self performSelectorOnMainThread:@selector(start) withObject:nil waitUntilDone:YES];
        return;
    }
    ...
}

これはすべて正常に機能しますが、Web サービスがアクティブなときにホーム ボタンを押すと、前述の例外が発生します。

私の推測では、ホーム ボタンが押された後、メイン スレッドが停止します (そうですか?)。そのため、現在実行中のアクションは更新されなくなり、有効ではなくなります。

UIApplicationWillResignActiveNotificationキュー内の操作をキャンセルまたは一時停止して、ホームボタンを押したときに反応するイベントをリッスンしようとしました。しかし、これは役に立ちませんでした。このエラーは、メイン スレッドが停止しているために発生するという私の推測は正しいでしょうか? 他にどうすれば現在の Web サービス スレッドを停止/キャンセルできますか?

よろしくお願いします

4

1 に答える 1

0

エラーが見つかりました。結局のところ、これはWebサービス自体の問題ではなく、2回作成および開始されたジオロケーターの問題でした。

このため、停止することのない、ある種のゾンビスレッドが作成されました。

于 2012-10-30T10:12:21.310 に答える