runModalForWindow限制http请求

时间:2011-02-14 05:42:47

标签: objective-c cocoa modal-dialog runloop

我有网址连接,通常可以正常使用

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

但是当我创建一个模态窗口时,没有任何请求收到响应:

[NSApp runModalForWindow:window];

如果我评论这一行,从而创建一个“标准”窗口,一切正常。

我尝试从NSURLConnectionDelegate实现所有方法,而不是一个名为。

的方法

我怀疑这是关于'run loops'的事情,但在这个方面缺乏经验。有没有人有这方面的经验?

谢谢

3 个答案:

答案 0 :(得分:8)

如果你的目标是10.5+,你可以告诉NSURLConnection也可以在NSModalPanelRunLoopMode中运行(当前线程的runloop模式在呈现模态视图的同时)

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

其中aRunLoop可能是[NSRunLoop currentRunLoop]mode可能是NSModalPanelRunLoopModeNSURLConnection doc

中的更多信息

如果您支持早期操作系统,则可能必须具有创造性(即使用多线程)。在10.5 here之前对此问题进行了很好的讨论。

答案 1 :(得分:1)

我没有碰到你所拥有的情况,但我建议在后台线程中产生并启动连接。

答案 2 :(得分: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]。