ios - 当您从不同的 View Controller 转入时,如何将数据从一个 View Controller 保存(附加)到另一个 View Controller ?

标签 ios swift

抱歉,问题有点长。请耐心等待。

基本上,我正在尝试使用 swift 编写一个简单的向上/向下计数 ios 应用程序。我有三个主视图 Controller 。一个是“初始 View Controller ”(它是 Root View Controller ),它只包含两个按钮 - 一个以模态方式呈现给实际计数页面(第二个 View Controller ),另一个以模态方式呈现给 tableViewController 页面(第三个 View Controller )。所以这些是三个 View Controller 。

因此,如果用户选择保存他们一直在计数的计数器,我想将该计数器 View Controller 上的数据附加到我创建的数组中,以显示在 tableViewController 上。所以我让 tableViewController 成为计数器 View Controller 的委托(delegate),以将数据附加到数组。

据我了解,您需要在 tableViewController 中实现 prepareSegue 以将 tableViewController 连接到 Counter View Controller。但是,因为计数器 View Controller 的转场不是源自 tableViewController 而是源自初始 View Controller ,prepareSegue 函数不起作用,因此委托(delegate)不起作用。因此,为了简化我的问题——当您从一个不同的 View Controller 切换时,您将如何将数据从一个 View Controller 保存(附加)到另一个 View Controller ?

我希望我的问题很清楚。我对软件开发完全陌生,不确定我是否有任何意义。非常感谢您的帮助!

最佳答案

如果 Storyboard路径中有三个 Controller ,一 -> 二 -> 三,并且你想让一知道三中的数据变化,那么你需要通过二传播变化。

一个粗略的版本可能是这样的:

protocol CountDelegate: class {
    func updateCount()
}

class One: UIViewController, CountDelegate {
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        guard let destination = segue.destination as? Two else { return }
        destination.delegate = self
    }

    func updateCount() {
        // whatever
    }

}

class Two: UIViewController {
    weak var delegate: CountDelegate?
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        guard let destination = segue.destination as? Three else { return }
        destination.delegate = self.delegate // just pass the delegate down
    }
}

class Three: UIViewController {
    weak var delegate: CountDelegate?

    func doWork() {
        self.delegate?.updateCount()
    }
}

所以代表是一,二和三(通过二)都指向它作为代表。

关于ios - 当您从不同的 View Controller 转入时,如何将数据从一个 View Controller 保存(附加)到另一个 View Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51003562/

相关文章:

ios - 无法生成具有旧节数 : 1 and new section count: 0 with FetchedResultsController 的新节图

iphone - 为什么 indexPathForItemAtPoint 总是返回 nil

ios - 当我尝试通过我的应用程序发送短信时,消息屏幕会自动取消

ios - 直接在推送 iOS 上启动 App

Swift 不取消初始化实例

ios - 如何实现定时本地通知

ios - 我想记住一个 (NSIndexPath *)indexPath 以便以后删除,但是崩溃了

ios - 内存使用量增加

ios - 由于对调度组的调用不平衡导致不明显的崩溃

ios - 从服务器获取 JSON 后如何更新应用程序中的标签?如果应该实时更新