gpt4 book ai didi

ios - 在 RubyMotion 中,如何在触摸后退链接时取消列表刷新?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:44:13 25 4
gpt4 key购买 nike

我是 RubyMotion 的新手,正在努力掌握一些 API。

我的应用程序是一系列非常基本的 UITable 列表,如果您选择一个项目,您将进入该项目的列表,这是通过推送一个新 Controller 实现的。

一切正常,但在我的列表 Controller 之一的 viewDidLoad 方法中,我正在调用一种方法来刷新来自 Internet 的列表数据。我在异步调度队列中运行刷新,所以 viewDidLoad 看起来像这样:

def viewDidLoad
super

loadItems

Dispatch::Queue.concurrent.async do
refreshItems
end
end

我遇到的问题是,如果我进入这个列表,等待刷新完成(通过拖尾调试日志)然后返回并进入另一个列表,这很好,但如果我进入并立即返回并进入刷新完成之前的另一个列表,应用程序崩溃并出现一个无法描述的错误,我可靠地被告知这是一个段错误。

因此,我相当确定我需要等待刷新完成后再关闭 Controller ,或者以某种方式从 Dispatch 队列中终止刷新线程,然后再关闭 Controller 。所以我的问题是:

  1. 当您按下左上角的 返回并关闭当前 Controller 时,如何捕捉“返回”事件?按下 Controller 时,您可以免费获得此功能,但我不确定如何捕获返回事件。

  2. 哪个是正确的方法,是在关闭 Controller 之前终止刷新线程还是等待它完成?杀死它似乎有点不安全,也许我可以向它发送一条消息,要求它完成正在执行的操作并退出,然后等待它响应说 ok done。

  3. 您如何获得问题 2 的正确答案?如果我知道如何将消息从 Dispatch 的线程发送回主线程,这将使这更简单一些。

最佳答案

在异步调用之外设置一个实例变量,并在刷新循环中检查它。离开时将其设置为“false”。

def viewDidLoad
super

loadItems

@refresh = true

Dispatch::Queue.concurrent.async do
refreshItems
end
end

def refreshItems
# inside your loop
if @refresh
# stuff
end
# end loop
end

def viewWillDisappear(animated)
@refresh = false

super
end

关于ios - 在 RubyMotion 中,如何在触摸后退链接时取消列表刷新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12909168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com