swift - 在不使用全局变量的情况下跨多个 View Controller 检查数据修改的方法?

标签 swift

我有一个包含多个 viewController 的应用程序。在第一个 VC 的 viewDidAppear() 上,我调用了一组函数,这些函数用从数据库中提取的信息填充一些数组,然后为 tableView 重新加载表数据。所有功能都运行良好,每次都能达到预期的效果。我关心的是 viewDidAppear() 被调用的频率。我不认为(除非我错了)每次 View 出现时自动调用刷新函数并重新加载所有数据是个好主意。我无法将其放入 viewDidLoad(),因为 tableView 是选项卡栏的一部分,如果对任何其他选项卡中的数据进行了一些修改,则不会调用 viewDidLoad()当按 Tab 键返回时,此时它需要 重新加载(因为进行了修改)。我想使用一组变量来检查是否对来自任何其他 viewController 的数据进行了任何修改,然后有条件地告诉 VDA 运行与否。一般:

override func viewDidAppear(_ animated: Bool) {
        if condition {
            //run functions
        } else{
            //don't run functions
        }
    }

这个问题是可以从许多不同的 viewController 修改数据,这些 viewController 可能无法返回到 viewDidAppear() 感兴趣的 View Controller (因此使用 prepareForSegue 不一定有效)。 “检查”数据是否已被修改的最佳方法是什么。同样,我认为一组 bool 变量会很好,但我想避免使用太多全局变量。有什么想法吗?

最佳答案

通知中心

struct NotificationName {
    static let MyNotificationName = "kMyNotificationName"
}

class First {

    init() {
        NotificationCenter.default.addObserver(self, selector: #selector(self.notificationReceived), name: NotificationName.MyNotificationName, object: nil)
    }

    func notificationReceived() {
        // Refresh table view here
    }
}

class Second {

    func postNotification() {
        NotificationCenter.default.post(name: NotificationName.MyNotificationName, object: nil)
    }
}

一旦调用postNotification,类First中的notificationReceived函数就会被调用。

关于swift - 在不使用全局变量的情况下跨多个 View Controller 检查数据修改的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45626083/

相关文章:

swift - 从 portIterator 获取 USB 设备的产品名称

iOS - iPad 的 viewWillTransition 中错误的 UIScreen 边界

ios - 如何检查 AVAudioPlayer 是否仍在运行?

ios - 如何从Observable <BleHandler.BlePeripheral>到BleHandler.BlePeripheral?

ios - 无法将类型 'NSRange'(又名 '_NSRange')的值转换为预期类型 'Range<Index>'(又名 'Range<String.CharacterView.Index>')

ios - show() View Controller 不起作用

ios - 如何检查 View 背景颜色

swift - 双数的类型在 Swift 中是 Int

objective-c - NSHTTPCookieStorage VS 钥匙串(keychain) VS NSUserdefault

ios - 在 SpriteKit 中添加到父级时未显示未归档的节点