gpt4 book ai didi

ios - 未为 ChildViewController 更新父变量

转载 作者:行者123 更新时间:2023-11-29 11:42:15 25 4
gpt4 key购买 nike

我有一个继承自 BaseViewController.swift 的类。我已经为核心数据更改跟踪定义了一个标志:

var coreDataUpdated: Bool?

我还在 BaseViewController.swiftviewWillAppear 中添加了核心数据变化的观察者

//Core data update
NotificationCenter.default.addObserver(self,
selector: #selector(self.CoreDataUpadated),
name: .NSManagedObjectContextObjectsDidChange,
object: nil)

现在,每当我通知核心数据发生变化时,我都会将 coreDataUpdated 变量更改为 true

@objc func CoreDataUpadated() {
self.coreDataUpdated = true
}

现在在 viewDidAppear 中的 ChildViewController.swift 中,当我检查 coreDataUpdated 时,它返回给我 nil

这是我的完整代码:

class BaseViewController: UIViewController {
var coreDataUpdated: Bool?

override func viewWillAppear(_ animated: Bool) {
//Core data update
NotificationCenter.default.addObserver(self,
selector: #selector(self.CoreDataUpadated),
name: .NSManagedObjectContextObjectsDidChange,
object: nil)
}

func CoreDataUpadated() {
self.coreDataUpdated = true
}
}


class ChildViewController: BaseViewController {
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
reloadData()
}

func reloadData() {
if super.coreDataUpdated ?? false { //I always get nil for
super.coreDataUpdated
tableView?.reloadData()
}
}
}

注意:我正在使用 swift 4 开发 Xcode 9 beta 5 和 iOS 11。但是,这段代码在 Xcode 8 和 iOS 10.3 上使用 swift 3 运行良好。

最佳答案

类继承并不意味着子类实例继承父类(super class)实例中分配给属性的值。

您有一个 BaseViewController 实例,它有一个 coreDataUpdated 属性,还有一个 ChildViewController 实例,它有一个 coreDataUpdated > 属性,因为它继承自 BaseViewController,但它的属性值与 BaseViewController 实例属性值无关;它们是不同的对象。

当您说 self.coreDataUpdated = true 时,您是在 BaseViewController 实例 上设置属性。

当您说 super.coreDataUpdated 时,您指的是 ChildViewController 实例 中的 coreDataUpdated 属性由它的父类(super class)定义;由于此属性从未被赋值,因此它是 nil

由于 ChildViewController 没有覆盖 coreDataUpdated super.coreDataUpdated 在实例中与 self.coreDataUpdated 相同ChildViewController,因此您可以将 if 语句重写为:

func reloadData() {
if self.coreDataUpdated ?? false {
tableView?.reloadData()
}
}

希望这能让你更清楚为什么 coreDataUpdatednil

与使用您自己的 Bool 相比,检查您的 NSManagedObjectContext 实例的 hasChanges 属性可能更简单。

关于ios - 未为 ChildViewController 更新父变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45811257/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com