1

我想在选项卡式应用程序中的几个 ViewController 之间共享一个变量。我尝试使用 [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];当我单击选项卡打开第二个视图作为崩溃的原因时。

4

2 回答 2

2

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

于 2013-09-07T14:58:01.303 回答
0

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

第二种方法要求那些 viewController 了解可以为其提供数据的对象,因此被认为是刚性设计。第一种方法意味着您有一些更高级别的对象可以获取数据(或已经包含数据)并将其提供给视图控制器。这是一个更优雅的解决方案,因为 viewCONtrollers 将更具可插拔性。您可以在此处使用的对象将是 UITabBarController 的子类。该对象包含(“知道”)视图控制器。如果此对象包含 dat(或可以检索它),则此对象将能够将其提供给 viewControllers。

作为 LudoZik(@LudoZik:我想支持你的答案,但由于没有足够的代表而不允许。)。指出,创建一个保存数据的自定义类(或者为简单起见,一个 NSDictionary 也可以)。然后,这可以由UitabbarController的子类拥有,并在必要时给予子视图controllers(例如,选择时,或者在加载时可能已经已经已经)。

于 2013-09-07T15:17:49.287 回答