我有网址连接,通常可以正常使用
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request
delegate:delegate];
但是当我创建一个模态窗口时,没有任何请求收到响应:
[NSApp runModalForWindow:window];
如果我评论这一行,从而创建一个“标准”窗口,一切正常。
我尝试从NSURLConnectionDelegate实现所有方法,而不是一个名为。
的方法我怀疑这是关于'run loops'的事情,但在这个方面缺乏经验。有没有人有这方面的经验?
谢谢
答案 0 :(得分:8)
如果你的目标是10.5+,你可以告诉NSURLConnection
也可以在NSModalPanelRunLoopMode
中运行(当前线程的runloop模式在呈现模态视图的同时)
-(void)scheduleInRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode
其中aRunLoop
可能是[NSRunLoop currentRunLoop]
而mode
可能是NSModalPanelRunLoopMode
。 NSURLConnection
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]。