1

UINavigationControllerの下に1つのUIViewControllerがある単純なiOSアプリケーションがあります。UIViewControllerには、NSManagedObjectContextのIBOutletがあります。

AppDelegateにはnavコントローラー用のIBOutletがありますが、Viewコントローラーにはありません。ビューコントローラは、XIBプロセス(navコントローラの子として)によって自動的にインスタンス化されます。

この設定では、アプリデリゲートのNSManagedObjectContextをビューコントローラーのIBOutletプロパティにきれいに割り当てるか渡すにはどうすればよいですか。途中にnavコントローラーがあります:)そしてアプリデリゲートにはUIViewControllerの直接プロパティがありません。

これは奇妙な問題です。あるXIBコンポーネントのプロパティを別のコンポーネントのプロパティにリンクしたいのです。私が行ったXIB作業のほとんどは、プロパティを取得し、それをXIB内のオブジェクトにポイントします。これにより、通常のプロセスでインスタンス化されますが、この場合、コンテキストはアプリデリゲートで正しく作成されています。インスタンス化するときにViewControllerに渡します。

4

3 に答える 3

0

あなたは正しい考えを持っていますが、あなたが取り組んでいる問題は完全にあなた自身の創造によるもののようです。アプリデリゲートにはナビゲーションコントローラー用のアウトレットがありますが、navコントローラーのルートビューコントローラー用のアウトレットはありません。これは、ペン先が読み込まれたときにビューコントローラーが作成されるようにペン先を設定したためです。それには何の問題もありませんが、アプリのデリゲートがそのコントローラーのアウトレットを持つべきではないという理由もありません。確かに、アウトレットの全体的な理由は、ペン先からロードされるものへの参照を取得することです。

ルートビューコントローラーのアプリデリゲートにアウトレットを追加し、接続します。その後、アプリデリゲートはコントローラーに管理対象オブジェクトコンテキストへの参照を与えることができます。

複数のViewControllerについての質問に関して、データを必要とするView Controller(A)、データを必要としない別のView Controller(B)をロードし、その後に3番目のビューコントローラーが続くのは、どのような実際のアプリでしょうか。 (C)どちらが再びデータを必要としますか?現実的な例がある場合は、役立つ場合があります。

管理対象オブジェクトのコンテキスト全体を連続する各ViewControllerに渡す必要はないことに注意してください。代わりに、管理対象オブジェクトを渡すことで、コントローラーが作業を行うために必要なモデルの一部だけを渡すことができます。

于 2011-03-05T04:42:58.897 に答える
0

Apple のドキュメントでは、マネージド オブジェクト コンテキストへの参照を、アプリ デリゲートから参照するのではなく、それらを必要とするクラスに渡すことを推奨しています。

これは、私の Core Data プロジェクトの 1 つでどのようにapplication:didFinishLaunchingWithOptions:見えるかです。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{        
    LocationsViewController *lvc = (LocationsViewController *)self.navigationController.topViewController;
    lvc.managedObjectContext = self.managedObjectContext;
    assert(lvc.managedObjectContext != nil);
    [self.window addSubview:self.navigationController.view];
    [self.window makeKeyAndVisible];

    return YES;
}

また、ルート ビュー コントローラーが 1 つある UINavigationController から始めていることがわかります。

于 2011-03-03T19:03:48.593 に答える
0

渡す必要はありません。必要に応じてアプリ デリゲートから取得するだけです。

#import "MyAppDleegate.h"

NSManagedObjectContext* moc = [(MyAppDelegate*)[UIApplication sharedApplication].delegate managedObjectContext];
于 2011-03-03T18:42:28.767 に答える