【问题标题】:runModalForWindow throttles http requestsrunModalForWindow 限制 http 请求
【发布时间】:2011-02-14 05:42:46
【问题描述】:

我有 url 连接,通常可以正常工作

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

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

[NSApp runModalForWindow:window];

如果我将此行注释掉,从而创建一个“标准”窗口,那么一切正常。

我尝试实现 NSURLConnectionDelegate 中的所有方法,但没有一个被调用。

我怀疑这与“运行循环”有关,但在这方面的经验很少。有人有这方面的经验吗?

谢谢

【问题讨论】:

    标签: objective-c cocoa modal-dialog runloop


    【解决方案1】:

    如果您的目标是 10.5+,您可以通过

    告诉NSURLConnection 也运行在NSModalPanelRunLoopMode(当前线程的运行循环在呈现模式视图时的模式)
    -(void)scheduleInRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode
    

    其中aRunLoop 可能是[NSRunLoop currentRunLoop] 而mode 可能是NSModalPanelRunLoopMode。更多信息在NSURLConnection doc。

    如果您支持早期的操作系统,您可能需要发挥创意(即使用多线程)。在 10.5 之前很好地讨论了这个问题 here。

    【讨论】:

      【解决方案2】:

      我没有遇到您遇到的情况,但我建议在后台线程中生成并启动连接。

      【讨论】:

        【解决方案3】:

        我也遇到了在模态窗口中使用 NSURLConnection 时没有调用委托方法的问题。

        经过一番调查,下面的代码解决了它。

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

        但是,当调用connectionDidFinishLoading时,[NSApp stopModal]不起作用,需要调用[NSApp abortModal]代替。

        【讨论】:

          猜你喜欢
          • 2014-08-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-12-13
          • 2023-03-27
          • 2014-09-30
          相关资源
          最近更新 更多