Swift UITableViewController数据源未读取新值
我有以下模型、基本UITableViewController类和UITableViewController的子类: 模型 UITableViewController-超类 UITableViewController-子类 我将使用MyFancyTable获取不同产品类别的价格 当API返回响应时,它将更新items变量中的价格,然后重新加载表 但是,当我重写子类MyFancyTable中的项时,即使在API回调期间价格已经更新,CellForRowatineXpath中的记录器仍然读取零价格。好像它从未更新过 日志结果: 找到0个价格-用于食品 找到0个价格-用于饮料 我可以确认API返回了许多价格Swift UITableViewController数据源未读取新值,swift,uitableview,datasource,subclass,Swift,Uitableview,Datasource,Subclass,我有以下模型、基本UITableViewController类和UITableViewController的子类: 模型 UITableViewController-超类 UITableViewController-子类 我将使用MyFancyTable获取不同产品类别的价格 当API返回响应时,它将更新items变量中的价格,然后重新加载表 但是,当我重写子类MyFancyTable中的项时,即使在API回调期间价格已经更新,CellForRowatineXpath中的记录器仍然读取零价格。好
任何协助都将不胜感激。谢谢 您的问题可能会导致将items变量设置为computed属性,这意味着每次调用时都会重新计算它 试试这个:
class MyFancyTable: BaseTableController {
override var items: [Product] = [Product(title: "FOOD"),Product(title: "DRINK")]
}
根据董武德的建议,我终于想出了一个解决办法。基本上,我需要在子类中重写init函数中的项,而不是像最初那样通过计算属性进行重写 子类现在看起来像:
class MyFancyTable: BaseTableController {
required init?(coder aDecoder: NSCoder) {
fatalError()
}
init() {
super.init(nibName: nil, bundle: nil)
items = [
Product(title: "FOOD"),
Product(title: "DRINK")
]
}
}
谢谢大家 您从未进入DispatchGroup。我不知道您是如何提取项目的。很抱歉,我剥离了大量代码以使其更可读。是否设置了断点以确保调用重新加载的数据?@Xcoder,是的。。。我可以确认是否调用了重新加载的数据。然后它再次转到CellForRowatineXpath,它打印出两种产品的0个价格。当我试图用这种方式覆盖它时,xcode给了我一个错误:不能用存储属性'items'覆盖。嗯,我认为你应该改变你的概念,在BaseTableController中你可以设置你的UI,例如tableView,在它的子类中,您实现了fetchData和declare items propertyTanks man,我已经根据您的建议发布了解决方案。
class MyFancyTable: BaseTableController {
override var items: [Product] {
set {}
get {
return [
Product(title: "FOOD"),
Product(title: "DRINK")
]
}
}
}
class MyFancyTable: BaseTableController {
override var items: [Product] = [Product(title: "FOOD"),Product(title: "DRINK")]
}
class MyFancyTable: BaseTableController {
required init?(coder aDecoder: NSCoder) {
fatalError()
}
init() {
super.init(nibName: nil, bundle: nil)
items = [
Product(title: "FOOD"),
Product(title: "DRINK")
]
}
}