调用tableView.reloadData()似乎在另一个线程上启动重新加载。如果我立即尝试选择我添加到我的数据结构中的单元格,它可能还没有被TableView重新加载。有没有办法告诉TableView何时完成reloadData()过程。我的实际代码是:
nobil@DESKTOP-VCON7T6 MINGW64 /c/Program Files/Java/jdk1.8.0_121/jre/lib/security
$ keytool -importcert -trustcacerts -alias ALIASNAME -file C:/Users/nobil/OneDrive/Documenti/mycompany/test/52708968.crt -keystore C:/Program Files/Java/jdk1.8.0_121/jre/lib/securitycacerts -storepass changeit
Opzione non valida: Files/Java/jdk1.8.0_121/jre/lib/securitycacerts
keytool -importcert [OPTION]...
Importa un certificato o una catena di certificati
Opzioni:
-noprompt non richiedere
-trustcacerts considera sicuri i certificati da cacerts
-protected password mediante meccanismo protetto
-alias <alias> nome alias della voce da elaborare
-file <filename> nome file di input
-keypass <arg> password chiave
-keystore <keystore> nome keystore
-storepass <arg> password keystore
-storetype <storetype> tipo keystore
-providername <providername> nome provider
-providerclass <providerclass> nome classe provider
-providerarg <arg> argomento provider
-providerpath <pathlist> classpath provider
-v output descrittivo
Utilizzare "keytool -help" per visualizzare tutti i comandi disponibili
其中selectNode是我的函数,用于定位显示该节点的TableViewCell。它经常失败,因为TableView还没有重新显示它。我可以通过插入一个等待循环来“强制”一个解决方案,该循环检查TableView是否在重新加载后请求了我的所有行,但我希望有一个更优雅的解决方案。我对一般的等待循环也感到不舒服。
答案 0 :(得分:0)
我想分享我发现的问题的解决方案,以及它对tableView.reloadData如何工作的含义。首先,这是我最终到达的代码:
func addNewItem() {
// here we create the kind of item the user chose
//ending with this
tableView.reloadData()
queueCheckForDone()
}
func queueCheckForDone() {
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + .milliseconds(1), execute: {
self.checkForDone()
})
}
func checkForDone() {
if items[items.count-1].viewCell != nil { // has last view cell been created
self.selectItem(item: addedItem)
} else {
queueCheckForDone()
}
}
问题是在reloadData之后,我希望选择刚刚添加的单元格。但是,调用后不会立即出现,因为tableView尚未完成加载。 reloadData想要在主线程上运行,而我的代码,一个事件处理程序,通过在主线程上阻止它。一旦我放弃线程等待,甚至一毫秒,reloadData抓住线程并重新加载整个表(> 250ms)。当我终于再次获得控制权时,我正在寻找的单元格始终存在,所以我从未执行checkForDone测试的else子句。