如何在选项卡式应用程序中的ViewControllers之间共享数据

时间:2013-09-07 13:49:11

标签: ios objective-c

我想在选项卡式应用程序中的几个ViewControllers之间共享一个变量。我尝试使用[NSUserDefaults]来保存和加载变量,但应用程序每次都崩溃了。 这是我在SecondViewController中的代码

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.

        totalApples = [[NSUserDefaults standardUserDefaults]integerForKey:@"numberOfApples"];
        [self setText:[NSString stringWithFormat:@"%g", totalApples] withExistingAttributesInLabel:self.l1];

    }

突出显示[super viewDidLoad];当我点击选项卡打开第二个视图作为崩溃的原因时。

2 个答案:

答案 0 :(得分:2)

以防万一:如果您只需要在多个VC之间共享数据,NSUserDefaults可能不是您模型的最佳方式。在这种情况下,您可能需要考虑使用单例设计模式的优势来创建共享数据所在的类。

答案 1 :(得分:0)

tabbarcontroller包含许多相同级别的viewControllers(与UINavigationController相对,它包含分层数据,因此第一个viewController将部分数据传递给下一个)。 那些viewControllers需要: - 一些对象将他们的数据交给他们 - 他们可以从中获取数据的某个对象。

第二种方法要求那些viewControllers了解可以为其提供数据的对象,因此被认为是严格的设计。 第一种方法意味着你有一些更高级别的对象可以获取数据(或者已经包含它)并且可以将它提供给viewcontrollers。这是一个更优雅的解决方案,因为viewCO控制器将更加可插拔。 您可以在这里使用的对象是UITabBarController的子类。该对象包含('了解')viewControllers。如果此对象包含dat(或可以检索它),则此对象将能够将其提供给viewControllers。

作为LudoZik(@LudoZik:我想提出你的答案,但由于没有足够的代表而被禁止)。指出,创建一个自定义类(或者为了简单起见,NSDictionary也可以)保存数据。然后,这可以由UITabBarController的子类拥有,并在必要时(例如,在选择时,或者可能已经加载时)提供给子viewControllers。