【发布时间】:2019-03-13 10:24:28
【问题描述】:
在 iPad 上,在 UISplitViewController 中,我在右侧部分有一个 UITableViewController,显示左侧所选内容的详细信息。因此,当我取消选择左侧的所有内容,从而在详细视图中将详细对象设置为 nil 时,我希望表格清除并显示一条消息以邀请用户选择一个元素。
这就是为什么我的详细 UITableViewController 子类中有以下内容:
var reference: Reference? {
didSet {
self.refreshInterface()
}
}
func refreshInterface() {
if let titleLabel = self.titleLabel {
if let ref = reference {
titleLabel.text = ref.projectName
} else {
titleLabel.text = NSLocalizedString("Please select a reference", comment: "")
}
}
tableView.reloadData()
}
override func numberOfSections(in tableView: UITableView) -> Int {
if(self.reference != nil) {
return 5
} else {
return 0
}
}
我用调试器检查了在我将引用设置为 nil 后,numberOfSections 被调用并返回 0。但是由于某种原因,表的所有 UI 都没有被清除。我仍然有与选择参考时相同的行和部分。我错过了什么吗?这是 Cocoa Touch 中的潜在错误吗?
【问题讨论】:
-
您不是在后台线程上执行上述操作,是吗?可能值得检查。
-
我真的不知道,但是当我看到“Cocoa Touch 中的潜在错误”时,我倾向于首先责怪其他事情——比如我! (说真的,我不是那么出色的程序员——即使 40 年后也是如此。)也就是说,你有没有我可以尝试的 complete 和 duplicatable 的东西?我对
UITableViews非常满意,同时拥有 iPad 和 iPhone,也许可以提供帮助。原来如此?你给我的还不够。 -
@dfd 你完全正确。当有人告诉我他们认为他们在如此成熟的框架中发现了一个错误时,我也非常怀疑。但是话又说回来,我已经使用表格视图很长时间了,我想我已经尝试了一切。即使在这里,我也希望这是一个后台线程问题,但我正在使用 Firebase 来查询我的数据,并且通常 Firebase 回调在主线程上运行。可以肯定的是,我将 refreshInterface() 调用包装在 DispatchQueue.main.async{} 中,但它并没有改变任何东西。
-
现在您提到了我从未使用过的东西 - Firebase。你认为这是罪魁祸首吗?如果是这样,也许可以这样标记它?
-
我想通了。请参阅下面的答案。
标签: ios swift uitableview ipad uisplitviewcontroller