Как передать ManagedObjectContext другим контроллерам представления в особом случае - PullRequest
0 голосов
/ 21 января 2011

У меня есть 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 в представление моей таблицы, а затем в представление карты, чтобы представление карты могло выполнять запросы в зависимости от того, что хочет видеть пользователь. Я советовался с примером кода Apple, который выглядит (из рецептов):

- (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 ]

1 голос
/ 21 января 2011

Почему бы не иметь NSManagedObjectContext в делегате приложения?Тогда он будет легко доступен из всех ваших контроллеров представления, и, поскольку они являются пользовательским интерфейсом, они выполняются в главном потоке и поэтому могут использовать один и тот же MOC.

0 голосов
/ 02 марта 2011

В итоге я создал одноэлементный класс для managedObjectModel, используя в качестве ссылки (прокрутите вниз до "Создание экземпляра синглтона").

...