0

コアデータを含むテーブルビューコントローラーにセグエしたい最初のイントロビューコントローラーでストーリーボードを使用しています。最初のコントローラーがルート コントローラーであることは理解していますが、コア データに接続するため、2 番目のコントローラーをルートにする必要があります。アプリ デリゲートで次の操作を行うと、次のエラーが発生します。

-[IntroViewController setViewControllers:]: 認識されないセレクターがインスタンス 0x7465b70 に送信されました
2013-01-21 22:29:15.331 PManager[35522:c07] *** キャッチされない例外 'NSInvalidArgumentException' が原因でアプリを終了します。理由: '-[IntroViewController setViewControllers:]: 認識されないセレクターがインスタンス 0x7465b70 に送信されました'

私の最初のビューは、ストーリーボードで「introController」と呼ばれます。

2 つ目のビューは、ストーリーボードの「listController」と呼ばれるコア データにフックされたテーブル ビューです。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)options
{

    // Get a reference to the navigation controller first
    UINavigationController *navigationController = (UINavigationController *) self.window.rootViewController;

    IntroViewController *introController = [navigationController.storyboard instantiateViewControllerWithIdentifier:@"introController"];
    RootViewController *listController = [navigationController.storyboard instantiateViewControllerWithIdentifier:@"listController"];

    // First item in array is bottom of stack, last item is top.
    navigationController.viewControllers = [NSArray arrayWithObjects:listController, introController, nil];

    // THEN get the root view controller (RootViewController)
    RootViewController *rootViewController = (RootViewController *)[[navigationController viewControllers] objectAtIndex:0];

    // And now pass the context
    rootViewController.managedObjectContext = managedObjectContext;

    [self.window makeKeyAndVisible];

    return YES;
}
4

1 に答える 1

0

アプリの構成方法を変更した方がよいでしょう。アプリケーション デリゲート クラスに依存して を管理する代わりに、managedObjectContext別のクラスをシングルトンとして作成して、管理対象オブジェクト コンテキストへのアクセスをグローバルに管理します。そのクラスを、テーブル ビュー コントローラー クラスおよびその他のクラスから直接参照します。このようなもの:ビュー間でデータを渡す最も効率的な方法

于 2013-01-23T02:31:11.233 に答える