【发布时间】:2016-11-20 07:58:51
【问题描述】:
我有一个ViewController 课程。它有一个类别ViewController (Details),它执行:
(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
打开项目的详细信息。
当我向我的ViewController 类添加一个新按钮时,我想将一些数据作为NSArray *myData 传递给另一个控制器,例如SearchController。但是,我的prepareForSegue 永远不会执行,因为它位于ViewController (Details) 内部。所以将prepareForSegue 添加到ViewController 似乎忽略了它。
如果我在ViewController (Details) 中使用prepareForSegue 的工作版本,它适用于我的SearchController,但它看不到在ViewController 中声明的iVar NSArray *myData。理想情况下,我不想声明要在 ViewController (Details) 中设置的新数据变量,因为它无关紧要。
如果ViewController 未执行prepareForSegue 或ViewController (Details) 未看到数据变量,如何通过按钮点击传递数据?有什么建议吗?
【问题讨论】:
-
首先使用CoreData、Realm或静态引用之类的东西来存储你的数据,没关系。这里重要的是,如果您对数据使用单向流,您可能永远不会再遇到这个问题,因为您不需要在类之间传递数据,相反,您将始终从单一数据源获取数据并且就是这样。
-
请显示代码 --- 仅显示相关代码 --- 来自 VC 和类别。
-
而且@JanCássio 非常正确:vcs 应该自己访问应用程序的模型。他们有时必须传递数据,但是,例如,当用户在 vcA 中选择模型的某个方面,而 vcB 的工作是呈现有关它的详细信息时,vcA 将数据“传递”到 vcB 是合理和必要的,只要它进行通信一个选择。
标签: ios objective-c cocoa-touch uiviewcontroller