从多个视图的iOS访问数据

问题描述:

我有一个多视图的iOS应用程序。从多个视图的iOS访问数据

用户第一次看到的登录UIView,并在输入正确的凭证后,他将被带到主“TabBarViewController”,即“管理”其余视图。

登录UIView通过模式Segue连接到TabBarViewController。我也使用这个Segue通过使用属性将数据从Login视图传递到TabBarViewController。一切都很好,直到现在。

如前所述,还有其他的视图,连接到该TabBarViewController,并且该标签栏仅显示它们。

的问题是,我怎么能访问TabViewController财产(其中一个LoginView设定某一个值),在其他的意见? 我希望能够从多个其他视图访问此属性。

谢谢。

+0

可以使用KVO,并且当值被设置为一个对象foo,更新显示/采取行动。 另一个选择是使用[self.presentingViewController做东西];并触发一个动作。 它确实取决于您想要创建的确切流程... – Raz

你还没有在这里明确的东西。我假设你已经子类UITabBarController

如果所有的视图控制器的标签栏控制器的孩子,那么self.tabBarController会给你访问到标签栏。

它可能最终会看起来像这样:

if ([self.tabBarController isKindOfClass:[MyTabBarController class]]) { 
    MyTabBarController *myTabBarController = (MyTabBarController *)self.tabBarController; 
    // … 
} 
+0

是的,这就是我一直在寻找 - 谢谢! – user3115488

+0

@ user3115488我觉得我应该告诉你,为数据模型添加属性的子类“UITabBarContorller”不是Apple推荐的。您可能希望遵循其他答案中的建议:创建单例数据管理器或将数据放入appDelegate。 –

如果你想分享从不同ViewControllers相同的数据,而不是UIView的我猜想,那么最好的方法是你可以使用一个Singleton类设置并获得您想要的数据/资产。

如果你不知道怎么写辛格尔顿,一个很好的教程为here

把这些数据在应用程序的代表,这实际上是一个Singleton。另一种方法是将控制器的引用传递给需要访问其他数据的其他控制器。

您可以创建从您的属性提供数据的协议。确认选项卡控制器到您的协议并实现此协议的方法。 然后在所有视图财产申报与本协议

id <YourProtocolName> delegate

当您从标签控制器设定选项卡控制器作为委托创建视图创建视图。它后,你可以在视图中

[self.delegate access_method_from_protocol]

1.增加一个属性来AppDelegate中,getter和setter方法的通话将被你

2.In你的其他类访问自动执行的财产,像这样: id value = [(MyAppDelegate *)[[UIApplication sharedApplication] delegate] myGreatProperty];