次のコードを使用して、問題なくパスの ViewController にコンテキストを渡しましたが、何らかの理由で、このプロジェクトでは動作が異なります。
- ユーザーがアクションを実行します
次のように ViewController をロードします。
ProjectListViewController *projectListViewController = [[ProjectListViewController alloc] init]; projectListViewController.context = [self context]; [self.view addSubview:[projectListViewController view]];
viewDidLoad メソッドには次のものがあります。
if (_context != nil) { NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; NSEntityDescription *entity = [NSEntityDescription entityForName:@"Project" inManagedObjectContext:_context]; [fetchRequest setEntity:entity]; NSError *error; self.projects = [_context executeFetchRequest:fetchRequest error:&error]; }
_context が nil であることがわかりました。
デバッグを行い、これが私が見つけたものです。
ViewDidLoad メソッドは、[self.view addSubview:[projectListViewController view]]; という行に到達する前に実行されます。したがって、コンテキストは設定されません。
しかし、ビュー宣言から init を削除すると、projectListViewController.context = [self context]; 実行されるため、コンテキストは nil ではありません。
addSubview が呼び出される前に ViewDidLoad を実行すべきではないと考えるのは間違っていますか?
コンテキストをViewControllerに渡すより良い方法はありますか?