iOS:在3个控制器之间共享状态/属性

时间:2014-03-16 04:25:37

标签: ios

我有一个表单,它为用户提供了一个高级模式。我已经用Google搜索并查看了不同的SO问题(在控制器,协议之间共享数据,以及在segue之间传递数据),但我想知道是否有更好的方法。

我有没有办法让某种“主控制器”在3个不同的控制器之间来回传输时保存所有数据?

如果我可以保留第二个控制器的数据并允许我的用户在第三个控制器中进行快速前进编辑,同时保持其数据不变,那么现在就可以了。

提前致谢


以下是我的应用的快速演练:

  1. FirstViewController:用户选择一个选项
  2. SecondViewController:用户在存储该选项时进行一些编辑
  3. (*可选)ThirdViewControl:使用Web视图进行一次快速编辑
  4. * xcode5 / iOS7

2 个答案:

答案 0 :(得分:0)

通常,我会将应用程序中使用的信息放在应用程序委托中,以便每个人都可以访问它。

另一种可能性是实现单例数据管理类来为您保留它。

在这种情况下,应用程序似乎真的是一个非常线性的流程,所以我只是将选择从vc1传递给vc2,然后在相应的prepareForSegue调用中再次传递给vc3。

答案 1 :(得分:0)

如果要将数据从一个视图控制器传递到下一个视图控制器并使用segues,则在prepareForSegue的行中调用下一个视图控制器上的方法。例如,在ViewController1和ViewController2之间进行segue时,将此代码添加到ViewController1并在其他视图控制器中根据需要重复:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    ViewController2 *viewController = segue.destinationViewController;

    [viewController configureWithSomeState:self.someState];
}

此代码假定someStateViewController1上定义的属性。

编辑:你可以做的一件事 - 虽然我不喜欢这种方法,因为它迫使你的VC拥有关于他们的父控制器的特殊知识 - 是派生UINavigationController,然后在你的故事板中,为导航控制器使用新类。将状态存储在派生的导航控制器中,并从每个VC访问它,如下所示:

DerivedNavigationController *navigationController = (DerivedNavigationController *)self.navigationController;

navigationController.someState...;