【发布时间】:2012-05-30 12:08:37
【问题描述】:
我正在 Rubymotion 中执行一个相当普通的调度队列,但它显然提前退出了。它永远不会通过 initWithContentsOfURL 调用。但是,删除 Dispatch::Queue 包装器并将调用放在主线程中是可行的。
模拟器中的应用程序退出时没有堆栈跟踪或出现问题的指示。我是否误用了调度队列?
def foo
Dispatch::Queue.concurrent.async do
error_ptr = Pointer.new(:object)
data = NSData.alloc.initWithContentsOfURL(
NSURL.URLWithString(url), options:NSDataReadingUncached, error:error_ptr)
unless data
p error_ptr[0]
return
end
json = NSJSONSerialization.JSONObjectWithData(data, options:0, error:error_ptr)
unless json
presentError error_ptr[0]
return
end
Dispatch::Queue.main.sync { print_results(json) }
end
end
def print_results(json)
p "#{json}"
end
【问题讨论】:
-
您的代码显示
print_results方法与您的Dispatch调用是内联的——它真的是这样设置的,还是Dispatch调用包含在不同的方法中? -
它不是内联的。这是一个单独的电话。 Dispatch 应该包含在一个方法中。
-
那么您的代码在 RubyMotion 1.8 上非常适合我;可能是您尝试加载的特定 URL 有问题?
-
谢谢迪伦。你让我走上正轨。如果我设置类似
url = "http://www.google.com"的东西,那将失败。但是如果我将字符串直接放在对 URLWithString 的调用中,它就可以工作。 -
很奇怪。你在哪里设置
url?在foo方法中,还是在代码中的其他地方?
标签: rubymotion