我是 RubyMotion 的新手,正在努力掌握一些 API。
我的应用程序是一个非常基本的 UITable 列表系列,如果您选择一个项目,您将进入该项目的列表,这是通过推送一个新控制器来实现的。
这一切都很好,但在我的列表控制器之一的 viewDidLoad 方法中,我正在调用一个方法,该方法从互联网刷新列表的数据。我在异步调度队列中运行刷新,所以 viewDidLoad 看起来像这样:
def viewDidLoad
super
loadItems
Dispatch::Queue.concurrent.async do
refreshItems
end
end
我遇到的问题是,如果我进入此列表,等待刷新完成(通过拖尾调试日志)然后返回并进入另一个列表很好,但如果我进入并立即退出并进入另一个列表之前刷新已完成,应用程序崩溃并出现无法描述的错误,我可靠地告知这是一个段错误。
所以我很确定我需要在关闭控制器之前等待刷新完成,或者在关闭控制器之前以某种方式从调度队列中终止刷新线程。所以我的问题是:
当您按下左上角返回并关闭当前控制器时,如何捕捉“返回”事件?推动控制器时,您可以免费获得此功能,但我不确定如何捕获返回事件。
哪种方法是正确的,在关闭控制器之前杀死刷新线程还是等待它完成?杀死它似乎有点不安全,也许我可以向它发送一条消息,要求它完成正在做的事情并退出,然后等待它回复说好的完成。
您如何获得问题 2 的正确答案?如果我知道如何从 Dispatch'd 线程将消息发送回主线程,这将使这更简单一些。