3

さて、私はこれを何度も理解しようとしました。

App Delegate が管理対象オブジェクト コンテキストをアプリケーションの最初のビュー コントローラーに渡してから、後続の各ビュー コントローラーが管理対象オブジェクト コンテキストを下に渡すようにするのがベスト プラクティスであることはわかっています。ただし、アプリケーションでタブ バー コントローラーを使用している場合、その余分なレイヤーについて頭を抱えているように見えることがあります。

私がそれを行う方法を理解できた唯一の方法は、各タブのルート ビュー コントローラーをアプリ デリゲートに "Reach Back" してコンテキストを取得することですが、私が理解しているように、これは貧弱な形式です。

4

4 に答える 4

2

インターフェイスビルダーを使用して同じことを達成できます。

これは、Rog の元の提案を少し変更した (さらにわかりやすくするための) バージョンです - IBOutlet の

@interface AppDelegate : NSObject <UIApplicationDelegate> {
    ViewController1 *vc1;
    ViewController2 *vc2;
    ViewController3 *vc3;
}

@property (nonatomic, retain) IBOutlet ViewController1 *vc1;
@property (nonatomic, retain) IBOutlet ViewController2 *vc2;
@property (nonatomic, retain) IBOutlet ViewController3 *vc2;

次に、実装ファイルで:

- (void)applicationDidFinishLaunching:(UIApplication *)application {
       vc1.managedObjectContext = self.managedObjectContext;
       vc2.managedObjectContext = self.managedObjectContext;
       vc3.managedObjectContext = self.managedObjectContext;
       // Continue with your implementation logic
}

次に、Interface Builder ctrl 内で App Delegate から Tab Bar Controller 内にネストされた View Controller にドラッグし、表示されるコンテキスト メニューから関連する View Controller をフックします。

于 2011-02-24T13:02:05.407 に答える
1

最終的に重要だったのは、タブ バー コントローラーを構築するためにインターフェイス ビルダーに依存しないことでした。コードで手動で行うことにより、applicatoinDidFinishLaunchingWithOptions でそれらを作成するときに、マネージド オブジェクト コンテキストをビュー コントローラーに簡単に渡すことができます。

この記事を基礎として使用しました:http://www.iphonelife.co.uk/creating-a-uitabbarcontroller-programmatically/

于 2011-02-14T18:03:18.340 に答える
1

AppDelegate で次のようなことを行うこともできます。

CoreDataUsingViewController *vc = (CoreDataUsingViewController *)[[tabBarController viewControllers] objectAtIndex:1];
vc.managedObjectContext = self.managedObjectContext;

いくつかの異なるビルド ターゲットを持つ既存のプロジェクトに coreData を追加していましたが、すべての異なる UITabBarControllers を最初から再作成したくありませんでした。この方法は非常に簡単でしたが、これが最も巧妙な方法であるかどうかはわかりません。

こちらもご覧ください

UITabBarController を使用するときに ManagedObjectContext を共有する方法

于 2013-01-01T00:30:58.293 に答える
0

あなたの問題を正しく理解しているかどうかわかりませんが、MOC を同じ方法で他のビュー コントローラーに単純に渡さないのはなぜですか? 次に例を示します。

@interface AppDelegate : NSObject <UIApplicationDelegate> {
    ViewController1 *vc1;
    ViewController2 *vc2;
    ViewController3 *vc3;
}

// Declare properties as per normal

次に、実装ファイルで:

- (void)applicationDidFinishLaunching:(UIApplication *)application {
       vc1.managedObjectContext = self.managedObjectContext;
       vc2.managedObjectContext = self.managedObjectContext;
       vc3.managedObjectContext = self.managedObjectContext;
       // Continue with your implementation logic
}

それが役立つことを願っています!ログ

于 2011-02-13T20:15:34.227 に答える