Core data 如何在特殊情况下将ManagedObjectContext传递给其他视图控制器

Core data 如何在特殊情况下将ManagedObjectContext传递给其他视图控制器,core-data,ios4,nsmanagedobjectcontext,viewcontroller,Core Data,Ios4,Nsmanagedobjectcontext,Viewcontroller,我有这样一个rootViewController: 标题: @interface ParkingRootViewController : UIViewController { UINavigationController *navigationController; UIToolbar *toolbar; UIBarButtonItem *lastUpdateLabel; NSPersistentStoreCoordinator *persistentStore

我有这样一个rootViewController:

标题:

@interface ParkingRootViewController : UIViewController {
    UINavigationController *navigationController;
    UIToolbar *toolbar;
    UIBarButtonItem *lastUpdateLabel;

    NSPersistentStoreCoordinator *persistentStoreCoordinator;
    NSManagedObjectModel *managedObjectModel;
    NSManagedObjectContext *managedObjectContext;
}

@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;
@property (nonatomic, retain) IBOutlet UIToolbar *toolbar;
@property (nonatomic, retain) IBOutlet UIBarButtonItem *lastUpdateLabel;

@property (nonatomic, retain, readonly) NSManagedObjectModel *managedObjectModel;
@property (nonatomic, retain, readonly) NSManagedObjectContext *managedObjectContext;
@property (nonatomic, retain, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator;

@property (nonatomic, readonly) NSString *applicationDocumentsDirectory;

-(IBAction)selectHome:(id)sender;
//-(void)loadOverlays;
-(void)testCoreData;

@end
实施:

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    [super viewDidLoad];

    //...

    [self testCoreData];

    //creating label in tool bar 
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 150.0f, 20.0f)];
    label.text = @"last updated...";
    label.textColor = [UIColor colorWithWhite:1.0 alpha:1.0];
    label.backgroundColor = [UIColor clearColor];
    label.textAlignment = UITextAlignmentCenter;
    //label.highlightedTextColor = [UIColor colorWithWhite:0.5 alpha:1.0];
    //label.highlighted = YES;
    label.font = [UIFont systemFontOfSize:13.0];
    label.userInteractionEnabled = NO;

    [lastUpdateLabel initWithCustomView:label];
    [label release];

    [self.view addSubview:self.navigationController.view];

    [self.navigationController.view setFrame:self.view.frame];

}
但是我需要将managedObjectModel传输到我的表视图,然后再传输到映射视图,以便映射视图可以根据用户希望看到的内容进行查询。我参考了一些苹果的示例代码,看起来像(来自配方):

我知道这在appDelegate中,但我想当选择一行或将另一个视图推送到堆栈上时,我也可以这样做,对吗?问题是,我已经用一个nib配置了我的大部分视图,看起来是这样的:

因此,我无法使用苹果公司采用的类似策略将managedObjectModel传输到备用viewController(在本例中为PermitListViewController),因为我在添加子视图时不直接访问PermitListViewController。如果有人知道我将如何将managedObjectModel发送到PermitListViewController。请分享!提前谢谢


编辑:我正在考虑将managedObjectModel放在一个单例类中。你们的人对此有什么想法?良好的编程实践?有什么我应该知道的吗?谢谢。

为什么不在应用程序代理上安装
NSManagedObjectContext
?然后它将很容易从您的所有视图控制器访问,因为它们是在主线程上执行的UI,因此可以共享同一个MOC。

我最终使用(向下滚动到“创建单例实例”)为managedObjectModel创建了单例类。

嗯,这有点复杂。由于我正在处理一个包含许多通过模态视图打开的“子应用”的项目,目前我希望每个子应用都有自己的managedObjectModel,至少最初是这样,这样每个应用部分都有自己的核心数据实例和模式。从那里,我可以将managedObjectModel移动到appDelegate。但就目前而言,我不想这样做,因为我希望在我的团队学习框架的同时保持核心数据实例的隔离。我成功地为managedObjectModel创建了一个singleton类。我唯一真正的问题是,这是否被认为是好的编程风格。
- (void)applicationDidFinishLaunching:(UIApplication *)application {
    recipeListController.managedObjectContext = self.managedObjectContext;
    [window addSubview:tabBarController.view];
    [window makeKeyAndVisible];
}