2011-02-14 110 views
4

我有URL連接,通常工作正常runModalForWindow節流的HTTP請求

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

但是,當我創建一個模式窗口,沒有要求過接收響應:

[NSApp runModalForWindow:window]; 

如果我出注釋此行,從而創建一個「標準」窗口,一切正常。

我試着從NSURLConnectionDelegate實現所有的方法,而不是單獨調用它們。

我懷疑這是關於「運行循環」的問題,但在這方面經驗不多。有沒有人有這方面的經驗?

謝謝

回答

8

如果你的目標10.5+,你可以告訴NSURLConnection也於NSModalPanelRunLoopMode運行通過

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

(你當前線程的runloop將是同時提出一個模式視圖模式),其中aRunLoop大概會是[NSRunLoop currentRunLoop]mode將是NSModalPanelRunLoopMode。更多信息在NSURLConnection doc

如果您支持早期的操作系統,您可能必須具有創造性(即使用多線程)。在10.5之前對這個問題進行了很好的討論here

1

我還沒有碰見你遇到的情況,但我建議產卵,並開始在後臺線程的連接。

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]代替。