Ios 运行过频繁时代码崩溃。火力基地/斯威夫特
上面的代码所做的是进入用户的invitedTopost,如果时间戳足够新,抓取密钥并在初始化中找到它,然后抓取post信息,用它创建一个post对象,将其附加到我的posts数组中,并每次重新加载我的tableview 我在启动时运行这个代码,然后我有一个按钮和一个运行这个函数的刷新控制器 如果我慢慢地点击刷新按钮,或者拖动鼠标慢慢刷新,这段代码就不会崩溃。然而,如果我快速点击按钮,有时我可以点击3次,有时我可以点击20次,但最终代码崩溃 我在我的cellForRowAtIndexPath中得到的索引超出了这一行的范围Ios 运行过频繁时代码崩溃。火力基地/斯威夫特,ios,swift,firebase,firebase-realtime-database,Ios,Swift,Firebase,Firebase Realtime Database,上面的代码所做的是进入用户的invitedTopost,如果时间戳足够新,抓取密钥并在初始化中找到它,然后抓取post信息,用它创建一个post对象,将其附加到我的posts数组中,并每次重新加载我的tableview 我在启动时运行这个代码,然后我有一个按钮和一个运行这个函数的刷新控制器 如果我慢慢地点击刷新按钮,或者拖动鼠标慢慢刷新,这段代码就不会崩溃。然而,如果我快速点击按钮,有时我可以点击3次,有时我可以点击20次,但最终代码崩溃 我在我的cellForRowAtIndexPath中得到
User
invitedToPosts
09283094823904
timestamp: 30909000909
Initiations
09283094823904
post information
因此,我假设这与清除post数组和尝试刷新页面有关,而另一个请求运行缓慢,然后它赶上了,一切都变糟了。不知道
如何安全地运行此代码,或者如何成功地编写此代码,以便在使用最新信息刷新tableview时不会发生崩溃
谢谢 为什么是调度队列?另外,为什么每次将post添加到数组时都要刷新表。填充数组,然后重新加载表一次(减去DispatchQueue)可能会更有效。为什么选择DispatchQueue?另外,为什么每次将post添加到数组时都要刷新表。填充数组,然后重新加载表一次(减去DispatchQueue)可能会更有效。
User
invitedToPosts
09283094823904
timestamp: 30909000909
Initiations
09283094823904
post information
let post = posts[indexPath.row]