1

HTTP通信を使用してコンテンツのダウンロード機能を備えたiPhoneアプリケーションをアップグレードしています。 メインスレッドでイベントが発生し、NSURLConnectionDelegate関数がiOS 4の別のスレッドで呼び出されていました。 しかし、iOS 5で同じコードをテストしたところ、メインスレッドでNSURLConnectionDelegate関数が呼び出されました。、しかしinitWithRequest:NSURLConnectionデリゲートがiOS 5のメインスレッドで呼び出されました

私はNSURLConnection sendSynchronousRequestを使用していませんでした。

AppleはiOS 5のNSURLConnectionのこの部分をアップグレードしましたか?

答えて

0

NSURLConnectionには、iOS 5のいくつかの新しいメソッドがあります。 sendAsynchronousRequest: ...、はい、彼らは何らかの方法でそれを更新しました。あなたのデリゲートメソッドで

- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait 

を使用するか、単に右キューに派遣することができ、それを修正するために

ドキュメントの状態:

あなたが実行ループや操作キュー内の接続のスケジュールを設定していない場合は、このメソッドを呼び出す する前に、接続が デフォルトモードでの現在の実行ループに予定されています。

あなたはどのスレッドで-startに接続しましたか?

[connection startImmediately:YES]dispatch_async(myThreadQueue ...)と呼んでください。

+0

私は** startImmediately:YES **を使用します。つまり、メインスレッドです。 – Yun

+0

私はそれを試みましたが、NSURLConnectionDelegate関数は呼び出されません。 – Yun

-1

YESstartImmediatelyに渡すと、現在の実行ループでデリゲートメソッドが呼び出されます。メインスレッドからこれを行うと、メインループが実行されます。

ただし、単にNOを渡して、手作業でstartを要求すると、デリゲートメソッドはメインスレッドではなく別のスレッドで実行されます。

関連する問題