1

我在我的 RubyMotion 应用程序中这样做:

Dispatch::Queue.concurrent('google').async {
  BubbleWrap::HTTP.get("http://google.com") do |response|
    p response.body.to_str
  end
}

此调用未完成。

但是,如果我将 BubbleWrap 代码放在 Dispatch 队列之外,它就可以正常完成。

4

1 回答 1

4

BubbleWrap::HTTP是 over 的抽象NSURLConnection,它依赖于RunLoop进行异步处理。不幸的是,没有在 GCD 队列上设置 RunLoop,而且我还没有弄清楚如何在 GCD 队列上启动 runloop。当我需要上述内容时,我求助于实例化一个 new NSThread,并手动启动了运行循环:

action = lambda do
  runLoop = NSRunLoop.currentRunLoop

  BW::HTTP.get("http://www.google.com") do |response|
    NSLog("Fetched Google!")
  end

  runLoop.run
end

thread = NSThread.alloc.initWithTarget action, selector:"call", object:nil
thread.start

这个答案是我关于同一主题的博文和Cocoa In The Shell 的重述

于 2012-11-03T08:51:06.317 回答