我正在查看 Pro Core Data 示例,我想知道传递 ManagedObjectContext 的好方法是什么。在书中的示例中,我看到作者在 AppDelegate 中初始化了 ManagedObjectContext,然后他在 MasterViewController 中这样做了
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
self.title = NSLocalizedString(@"League Manager", @"League Manager");
id delegate = [[UIApplication sharedApplication] delegate];
self.managedObjectContext = [delegate managedObjectContext];
}
return self;
}
然后,当一个新的 ViewController 从表行选择被压入堆栈时,完成:
NSManagedObject *team = [[self fetchedResultsController] objectAtIndexPath:indexPath];
TeamViewController *teamViewController = [[TeamViewController alloc] initWithMasterController:self team:team];
[self presentModalViewController:teamViewController animated:YES];
使用 StoryBoards,我再也看不到那种类型的 init 方法了。我看到prepareForSegue主要用于,我在Beginning iOS 5 Development一书中看到,作者会做这样的事情:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
UIViewController *destination = ((UINavigationController *)segue.destinationViewController).topViewController;
if ([destination respondsToSelector:@selector(setDelegate:)]) {
[destination setValue:self forKey:@"delegate"];
}
我想不出一个好方法来保持我的类解耦并在我的 viewControllers 中引用 managedObjectContext。我是否在所有需要查看它的视图控制器上设置了 managedObjectContext?我是否按照第一个示例中的作者所做的那样,保留对具有引用的 MasterViewController 的引用并将其传递给我的不同 ViewController?我不确定这样的“最佳实践”是什么。谢谢!