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

我想在选项卡式应用程序中的几个ViewController之间共享一个variables。 我尝试使用[NSUserDefaults]来保存和加载variables,但每次应用程序崩溃。 这是我在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]; 当我点击标签打开第二个视图作为崩溃的原因。

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

一个tabbarcontroller包含许多相同级别的viewControllers(而不是一个UINavigationController,它包含分层数据,所以第一个viewController将部分数据传递给下一个)。 那些viewControllers需要: – 一些对象把他们的数据 – 他们可以从中获取数据的一些对象。

第二种方法要求那些viewController知道可以给他们的数据的对象,因此被认为是严格的devise。 第一种方法意味着你有一些更高级的对象可以获取数据(或已经包含它),并且可以将它提供给viewcontrollers。 这是一个更优雅的解决scheme,viewCOntrollers将更易于插拔。 你可以在这里使用的对象是UITabBarController的子类。 这个对象包含('知道')viewControllers。 如果这个对象包含了dat(或者可以检索它),那么这个对象就可以把它提供给viewControllers。

LudoZik(@LudoZik:我想提高你的答案,但没有被允许,因为没有足够的代表)。 指出,创build一个自定义的类(或为了简单NSDictionary也行),持有的数据。 这个可以被UITabBarController的子类所拥有,并在必要的时候(例如被select时,或者已经被加载的时候)被赋予子视图控制器。