【问题标题】:Best Practice: Accessing instance of UIViewController from another in iOS最佳实践:在 iOS 中从另一个访问 UIViewController 的实例
【发布时间】:2017-03-24 07:09:31
【问题描述】:

我有一个导航控制器,堆栈上有 4 个视图控制器。我需要从 ViewController4 访问 ViewController1 中的一个函数。这样做的正确方法是什么?

  1. 是否通过 ViewController2 和 3 传递对 ViewController1 的引用,然后使用协议委托访问该函数?

  2. 我是否将 ViewController1 的引用存储在结构中,然后从那里访问它?

第二个是我目前正在做的事情。我在离开 ViewController1 时设置了引用,然后在完成后将该引用设置回 nil。

为什么我需要这样做:

VC1 有一个包含一堆项目的 tableview。这些项目中的数据是在 VC4 中编辑的。在 VC4 中完成编辑后,我想保存、弹出到根目录,然后用新数据重新加载 tableview。

【问题讨论】:

  • Edit 您的问题更详细地说明了为什么需要 VC4 才能访问 VC1 中的函数。直接引用另一个是一个非常糟糕的主意。

标签: ios


【解决方案1】:

你的计划全错了。您应该做的是拥有一个可以发布有关其数据更改的通知的数据模型。视图控制器之间不应该有任何链接。 VC1 应该准备好监听来自数据模型的通知。当 VC4 更新数据模型时,数据模型会告诉正在监听的任何人它已经更新。

通过这种设置,任意数量的视图控制器都可以监听正在传递的数据模型的同一个实例。您的应用程序的任何部分都可以根据需要响应这些通知。这种设计最好的部分是除了每个人都知道数据模型之外,没有任何类对任何其他特定类有任何了解。

数据模型不知道任何控制器或视图。

没有控制器与其他控制器有任何直接链接,除了一个需要呈现另一个控制器。

【讨论】:

  • 我实际上是在使用数据模型来处理我的数据。我已经开始使用 NotificationCenter 实施您的建议,它似乎就是我想要的。谢谢!
【解决方案2】:

我认为您可以使用通知。让 VC1 订阅通知。需要时,在 VC4 中发送通知。

【讨论】:

    猜你喜欢
    • 2022-08-13
    • 2020-10-20
    • 2012-03-23
    • 2013-11-04
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 2011-08-13
    相关资源
    最近更新 更多