0

フラグによって制御されるループを介して生き続けるワーカー スレッドがあります。リモートサーバーへの永続的な接続を開くため、アプリケーションの長さの間、スレッドを存続させる必要があります。

そのスレッドを起動し、次のようにいくつかのメソッドを呼び出します。

[worker performSelector:@selector(getBusy) onThread:worker withObject:nil waitUntilDone:NO];

これはうまくいくようで、メソッドが呼び出されます。ある時点でgetBusy、メインスレッドで次のメソッドを呼び出そうとします。

[delegate performSelectorOnMainThread:@selector(gotBusy) withObject:nil waitUntilDone:NO

ここで、delegate は別のスレッドを開始するクラスへの参照です。

問題はgotBusy、メイン スレッドで呼び出されないことです。NSLog() ステートメントを追加しましたが、コンソールに表示されません。

これをデバッグするには何を探す必要がありますか?

4

2 に答える 2

2

まず、 がdelegatenil でないことを確認してください。次に、メイン イベント ループがブロックされておらず、モーダル モードで実行されていないことを確認します。

于 2013-04-15T15:06:23.990 に答える
0

を割り当てたことがないので、 nil オブジェクトdelegateを呼び出している可能性はありますか? ワーカー スレッドがブロックされ、デリゲートがその作業を実行できるようにperformSelectorOnMainThread設定waitUntilDoneすることができます。YES

于 2013-04-15T15:07:28.027 に答える