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] を強調表示します。クラッシュの原因として、タブをクリックして2番目のビューを開くと。

4

2 に答える 2

2

念のため: 複数の VC 間でデータを共有する必要がある NSUserDefaults場合は、モデルにとって最適な方法ではない可能性があります。その場合、シングルトン デザイン パターンの利点を利用して、共有データが配置されるクラスを作成することを検討することをお勧めします。

于 2013-09-07T14:58:01.303 に答える
0

tabbarcontroller には、多数の同じレベルの viewController が含まれています (階層データを含む UINavigationController とは対照的に、最初の viewController はデータの一部を次の viewController に渡します)。これらのviewControllerには、次のいずれかが必要です。 - データを渡すオブジェクト - データを取得できるオブジェクト。

2 番目のアプローチでは、これらの viewController がデータを提供できるオブジェクトに関する知識を持っている必要があるため、厳格な設計と見なされます。最初のアプローチは、データにアクセスできる (または既にデータを含んでいる) 高レベルのオブジェクトがあり、それをビューコントローラーに渡すことができることを意味します。これは、viewCONtrollers がよりプラグ可能になるため、より洗練されたソリューションです。ここで使用できるオブジェクトは、UITabBarController のサブクラスです。このオブジェクトには、viewControllers が含まれています (「知っている」)。このオブジェクトにデータが含まれている (または取得できる) 場合、このオブジェクトはそれを viewControllers に渡すことができます。

LudoZikとして(@LudoZik:あなたの回答に賛成したかったのですが、十分な担当者がいないため許可されませんでした.)。指摘したように、データを保持するカスタム クラスを作成します (または、簡単にするために NSDictionary でもかまいません)。これは、UITabBarController のサブクラスによって所有され、必要に応じてサブ viewControllers に提供されます (たとえば、選択されたとき、または既に読み込まれているときなど)。

于 2013-09-07T15:17:49.287 に答える