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

时间:2011-01-21 10:27:52

标签: core-data ios4 nsmanagedobjectcontext viewcontroller

我有一个像这样的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转移到我的表视图然后转移到地图视图,以便地图视图可以根据用户想要查看的内容进行查询。我正在咨询一些类似于(来自Recipes)的苹果示例代码:

- (void)applicationDidFinishLaunching:(UIApplication *)application {
    recipeListController.managedObjectContext = self.managedObjectContext;
    [window addSubview:tabBarController.view];
    [window makeKeyAndVisible];
}

我知道这是在appDelegate中,但我认为当选择一行或将另一个视图推入堆栈时我可以这样做,对吧?问题是我用一个看起来像这样的笔尖配置了我的大部分视图:

alt text

由于这个原因,我无法使用Apple采用的类似策略将managedObjectModel传输到备用viewController(在本例中为PermitListViewController),因为在添加子视图时我没有直接访问PermitListViewController。如果有人知道如何将我的managedObjectModel变为我的PermitListViewController。请分享!提前谢谢!

编辑:我正在考虑将managedObjectModel放在单例类中。你们这些人的想法是什么?良好的编程习惯?我应该注意什么?感谢。

2 个答案:

答案 0 :(得分:1)

为什么不在应用代理上拥有NSManagedObjectContext?然后可以从所有视图控制器轻松访问它,因为它们是在主线程上执行的UI,因此可以共享相同的MOC。

答案 1 :(得分:0)

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