Как использовать контекст управляемых данных из модального представления?(Основные данные) - PullRequest
4 голосов
/ 17 июня 2011

У меня настроена базовая структура данных. В моем заявлении делегат, у меня есть:

    - (void)applicationDidFinishLaunching:(UIApplication *)application
{    

    // Configure and show the window.

    RootViewController *rootViewController = [[RootViewController alloc] initWithStyle:UITableViewStylePlain];

    NSManagedObjectContext *context = [self managedObjectContext];
    if (!context) {
        // Handle the error.
    }
    rootViewController.managedObjectContext = context;

    UINavigationController *aNavigationController = [[UINavigationController alloc] initWithRootViewController:rootViewController];
    self.navigationController = aNavigationController;

    [_window addSubview:[_navigationController view]];
    [_window makeKeyAndVisible];

    [rootViewController release];
}

Tl; dr : этот код устанавливает указатель на контекст управляемого объекта для моих данных, а затем задает для управляемого объекта контроллера rootObjectContext его управляемый объектObjectContext.

Итак, я поднимаю модальное представление, чтобы позволить пользователю добавлять данные. Но чтобы сохранить эти данные, мне нужен доступ к контексту managedObjectContext, потому что именно так вы сохраняете данные ...

foo *myFoo = (foo *)[NSEntityDescription insertNewObjectForEntityForName:@"Foo" inManagedObjectContext:managedObjectContext];

... но я не могу назвать это, не имея доступа к контексту управляемого объекта. Как получить доступ к managedObjectContext rootViewController из модального представления.

1 Ответ

3 голосов
/ 17 июня 2011

Я столкнулся с этой проблемой и подумал о двух решениях.

  1. Передайте данные корневому контроллеру представления в словаре (через NSNotificationCenter) и сохраните их.

  2. Передайте ManagedObjectContext (MOC) в контроллер модального представления и позвольте MOC модального представления сделать сохранение.

Я закончил с # 2 по нескольким причинам.

  • В результате становится проще, чем сохранять больше, чем простые данные.
  • Создание пользовательского информационного справочника грязно.
  • Диалог «Добавить объект» должен иметь возможность добавить объект , верно?

Чтобы реализовать это, в своем подклассе UIViewController просто добавьте свойство, подобное этому:

//... In your interface:
NSManagedObjectContext *moc;

//... beneath your interface:
@property (nonatomic, retain) NSManagedObjectContext *moc;

Тогда не забудьте синтезировать и выпускать при необходимости. Далее, в вашем корневом представлении, перед тем как представить представление мода, передайте контекст:

//... Create Modal VC, then...
[modalViewController setMOC:self.managedObjectContext];
// Now, present the modal VC

Бум, у тебя MOC в модальном виде. Вызовите сохранить при необходимости. Обратите внимание, что если вы забудете передать MOC, ваше приложение потерпит крах при попытке выполнить запрос на выборку.

...