2011-02-14 130 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]代替。