我已经使用以下代码将上下文传递给传递中的 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 为零。
做了一个调试,这是我发现的。
ViewDidLoad 方法在到达 [self.view addSubview:[projectListViewController view]]; 行之前运行。因此没有设置上下文。
但是,如果我从视图声明中删除了 init,那么 projectListViewController.context = [self context]; 运行,因此上下文不为零。
我认为在调用 addSubview 之前不应运行 ViewDidLoad 是否不正确?
有没有更好的方法将上下文传递给 ViewController?