совместное использование NSManagedObjectContext и других классов обслуживания между вкладками iphone / ipad - PullRequest
2 голосов
/ 09 августа 2010

Я хорошо разбираюсь в создании iPad-приложения на основе вкладок Core Data.Я передаю свой NSManagedObjectContext моему корневому представлению, используя следующую информацию в классе моего делегата приложения.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
    self.rootViewController.managedObjectContext = self.managedObjectContext;
    [window addSubview:tabBarController.view];
    [window makeKeyAndVisible];

    return YES;    
}

Мой вопрос: как мне установить один и тот же managedObjectContext на всех моих вкладках?Также было бы хорошо, если бы я мог настроить некоторые из своих классов обслуживания в делегате приложения и использовать один и тот же экземпляр на всех моих вкладках.Как это можно сделать?

Заранее спасибо!

Ответы [ 2 ]

4 голосов
/ 09 августа 2010

«Вкладка» - это просто другой контроллер представления.Когда вы запускаете VC для каждой вкладки, вы можете передать им контекст управляемого объекта точно так же, как вы задали rootViewController.managedObjectContext, предполагая, что у них есть свойства managedObjectContext.

Некоторые люди используют одноэлементные объекты для предоставления основных данныхобъекты для своих классов;В приложении, над которым я сейчас работаю, я объявил протокол CoreDataSource с геттерами для моих NSManagedObjectContext, NSManagedObjectModel и NSPersistentStoreCoordinator и реализовал этот протокол в моем appDelegate.Мои контроллеры представления, которым нужно использовать базовые данные, имеют переменные-члены типа NSObject , и, когда они создают друг друга, они устанавливают свойство.Все они на самом деле указывают на мой appDelegate, но не знают об этом, поэтому они не тесно связаны с вышестоящим объектом.

2 голосов
/ 09 августа 2010

Самое простое решение - добавить суперкласс для контроллеров представления вкладок с атрибутом managedObjectContext и пользовательским методом получения, например:

- (NSManagedObjectContext *) managedObjectContext{
    if (managedObjectContext !=nil) {
        return managedObjectContext;
    }
    MyAppDelegateClass *appDelegate=(MyAppDelegateClass *)[[UIApplication sharedApplication] delegate];
    self.managedObjectContext=appDelegate.managedObjectContext;
    return managedObjectContext;
}

Если все ваши контроллеры представления вкладок наследуют этот метод, они все будутавтоматически найти контекст управляемого объекта делегата приложения.И все готово.

...