Swift UITableViewController数据源未读取新值

Swift UITableViewController数据源未读取新值,swift,uitableview,datasource,subclass,Swift,Uitableview,Datasource,Subclass,我有以下模型、基本UITableViewController类和UITableViewController的子类: 模型 UITableViewController-超类 UITableViewController-子类 我将使用MyFancyTable获取不同产品类别的价格 当API返回响应时,它将更新items变量中的价格,然后重新加载表 但是,当我重写子类MyFancyTable中的项时,即使在API回调期间价格已经更新,CellForRowatineXpath中的记录器仍然读取零价格。好

我有以下模型、基本UITableViewController类和UITableViewController的子类:

模型

UITableViewController-超类

UITableViewController-子类

我将使用MyFancyTable获取不同产品类别的价格

当API返回响应时,它将更新items变量中的价格,然后重新加载表

但是,当我重写子类MyFancyTable中的项时,即使在API回调期间价格已经更新,CellForRowatineXpath中的记录器仍然读取零价格。好像它从未更新过

日志结果:

找到0个价格-用于食品

找到0个价格-用于饮料

我可以确认API返回了许多价格


任何协助都将不胜感激。谢谢

您的问题可能会导致将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")
        ]
    }

}