0

私はこのチュートリアルに従っています: http://maybelost.com/2011/12/tutorial-storyboard-app-with-core-data/クラス間で managedObjectContext を渡そうとすると、このエラーが発生します:

2012-04-23 09:53:13.969 PictureList[10287:fb03] -[UINavigationController    setManagedObjectContext:]: unrecognized selector sent to instance 0x6d20a80
2012-04-23 09:53:13.992 PictureList[10287:fb03] *** Terminating app due to uncaught  exception 'NSInvalidArgumentException', reason: '-[UINavigationController    setManagedObjectContext:]: unrecognized selector sent to instance 0x6d20a80'
*** First throw call stack:
(0x16ab022 0x183ccd6 0x16accbd 0x1611ed0 0x1611cb2 0x1c05 0x14386 0x15274 0x24183 0x24c38    0x18634 0x1595ef5 0x167f195 0x15e3ff2 0x15e28da 0x15e1d84 0x15e1c9b 0x14c65 0x16626 0x1afd    0x1a65)
terminate called throwing an exception(lldb) 

エラーは漠然としていますが、UINavigationController がこの問題の原因であると思われます。アプリを実行するとすぐにクラッシュします。

Context を初期コントローラーに渡そうとしている Appdelegate.m のコードは次のとおりです。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
    // Pass the managed object context to the root view controller (the login view)
    LoginViewController *rootView = (LoginViewController *)self.window.rootViewController;
    rootView.managedObjectContext = self.managedObjectContext;
    ....
    }
return YES;
}

そして、セグエを介して LoginViewController から次のクラスに渡そうとしています。LoginViewController.m:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    UINavigationController *navController = (UINavigationController *)[segue destinationViewController];
    PictureListMainTable *piclist = (PictureListMainTable *)[[navController viewControllers] lastObject];
    piclist.managedObjectContext = managedObjectContext;
}

私が試した別のことは、コンテキストを UINavigationController に渡すことでした。

// This code was customized to handle the navigation controller
// Pass the managed object context to the root view controller (the login view)
UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
LoginViewController *rootView = (LoginViewController *)navigationController.topViewController;
rootView.managedObjectContext = self.managedObjectContext;

このアプローチを使用すると、少なくともアプリをログイン画面にロードすることができましたが、セグエしようとするとアプリがクラッシュしました。この問題を解決するにはどうすればよいですか?

編集:わかりました、問題が見つかりました。チュートリアルでは、ログイン コントローラーにログインする前にナビゲーションが埋め込まれているという印象を受けましたが、ナビゲーション コントローラーは実際には LoginViewController と PictureListMainTable の間に入ります。

4

2 に答える 2

0

エラーは非常に具体的なようです。アプリのある時点で、インスタンスまたはサブクラスのプロパティを[navController setManagedObjectContext: ...]設定することによって明示的または暗黙的にコード化された行があります(これはあなたが行います)。managedObjectContextUINavigationController

エラーは、メソッドUINavigationControllerがないことを示しています。.hの宣言でsetManagedObjectContext:間違った設定を使用しているか、.mのインターフェイスでより寛容な行が欠落しているか、ディレクティブが欠落している可能性があります。@property@property@synthesize

于 2012-04-23T15:34:45.547 に答える
0

その LoginViewController クラスでプロパティを宣言する必要があります。

LoginViewController.h で:

@property(nonatomic, strong) NSManagedObjectContext *context;

LoginViewController.m で:

@synthesize context;

次に、applicationDidFinishLaunchingWithOptions で:

// Pass the managed object context to the root view controller (the login view)
LoginViewController *rootView = (LoginViewController *)self.window.rootViewController;
rootView.context= self.managedObjectContext;
于 2012-04-23T19:55:35.977 に答える