4

URL接続があり、通常は正常に動作します

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request
                                                              delegate:delegate];

しかし、モーダルウィンドウを作成すると、リクエストが応答を受け取ることはありません:

[NSApp runModalForWindow:window];

この行をコメントアウトして「標準」ウィンドウを作成すると、すべてが機能します。

私は NSURLConnectionDelegate からすべてのメソッドを実装しようとしましたが、呼び出されたメソッドは 1 つもありませんでした。

これは「実行ループ」に関するものだと思いますが、この分野での経験はほとんどありません。誰もこれについて経験がありますか?

ありがとうございました

4

3 に答える 3

8

10.5+ をターゲットにしている場合は、 (モーダル ビューを表示しているときに現在のスレッドの実行ループが入るモード)NSURLConnectionで実行するように指示することもできます。NSModalPanelRunLoopMode

-(void)scheduleInRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode

aRunLoopおそらくどこに[NSRunLoop currentRunLoop]あり、はあるmodeでしょうNSModalPanelRunLoopModeNSURLConnection詳しくはドキュメントをご覧ください。

以前の OS をサポートしている場合は、工夫が必要になる場合があります (マルチスレッドなど)。10.5 より前のこの問題については、ここで適切な議論を行ってください。

于 2011-02-14T07:23:18.783 に答える
1

また、モーダル ウィンドウで NSURLConnection を使用するときにデリゲート メソッドが呼び出されないという同じ問題にも遭遇しました。

いくつかの調査の後、次のコードで解決します。

NSURLConnection* conn = [[NSURLConnection alloc] initWithRequest:requst delegate:self startImmediately:NO];
[conn scheduleRunLoop:[NSRunLoop currentLoop] forMode:NSModalPanelRunLoopMode];
[conn start];

ただし、connectionDidFinishLoading が呼び出されると、[NSApp stopModal] が機能しないため、代わりに [NSApp abortModal] を呼び出す必要があります。

于 2011-04-24T05:17:01.810 に答える
1

私はあなたのような状況には遭遇していませんが、バックグラウンド スレッドで生成して接続を開始することをお勧めします。

于 2011-02-14T06:59:40.533 に答える