我想在选项卡式应用程序中的几个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];当我点击选项卡打开第二个视图作为崩溃的原因时。
答案 0 :(得分:2)
以防万一:如果您只需要在多个VC之间共享数据,NSUserDefaults
可能不是您模型的最佳方式。在这种情况下,您可能需要考虑使用单例设计模式的优势来创建共享数据所在的类。
答案 1 :(得分:0)
tabbarcontroller包含许多相同级别的viewControllers(与UINavigationController相对,它包含分层数据,因此第一个viewController将部分数据传递给下一个)。 那些viewControllers需要: - 一些对象将他们的数据交给他们 - 他们可以从中获取数据的某个对象。
第二种方法要求那些viewControllers了解可以为其提供数据的对象,因此被认为是严格的设计。 第一种方法意味着你有一些更高级别的对象可以获取数据(或者已经包含它)并且可以将它提供给viewcontrollers。这是一个更优雅的解决方案,因为viewCO控制器将更加可插拔。 您可以在这里使用的对象是UITabBarController的子类。该对象包含('了解')viewControllers。如果此对象包含dat(或可以检索它),则此对象将能够将其提供给viewControllers。
作为LudoZik(@LudoZik:我想提出你的答案,但由于没有足够的代表而被禁止)。指出,创建一个自定义类(或者为了简单起见,NSDictionary也可以)保存数据。然后,这可以由UITabBarController的子类拥有,并在必要时(例如,在选择时,或者可能已经加载时)提供给子viewControllers。