Шаблон сохранения делегата основных данных

#objective-c #ios #core-data

#objective-c #iOS #core-data

Вопрос:

Я использую CoreData в iOS. У меня есть модальный AddViewController с RootViewController в качестве делегата.

Должен ли я выполнять сохранение контекста управляемого объекта в корневом контроллере или в самом модальном контроллере?

Я вижу примеры передачи данных обратно в RootViewController, но не вижу, как это будет работать при сбоях проверки данных или более сложных сценариях, для которых требуется контекст управляемого объекта.

 // AddViewController.m

- (void)save
{
  [[self delegate] controller:(id)controller didFinishWithSave:(BOOL)save withName(NSString *)name;
}

// RootViewController.m

- (void)controller:(id)controller didFinishWithSave:(BOOL)save
{
  if (save)
  {
    // save context
  }
  [self dismissModalViewControllerAnimated:YES];
}
  

На данный момент я отклоняю модальное использование протокола делегирования.
Есть какие-либо рекомендации по лучшим практикам?
Спасибо

Ответ №1:

Я знаю, что это немного поздно, но для других, кто сталкивается с этим, я бы добавил немного больше к ответу Левенда.

Да, у вас должен быть отдельный класс менеджера для обработки операций (возможно, сам класс).

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

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

Недавно я столкнулся с mogenerator, который должен помогать в управлении классами CoreData. Я еще не устал от этого, но звучит неплохо.

Ответ №2:

С точки зрения архитектуры вам следует создать отдельный класс менеджера, отвечающий за операции с основными данными. С технической точки зрения, не имеет значения, где вы сохраняете (root или модальный VC), если вы делаете это в том же потоке, откуда исходят данные.

Ответ №3:

Имея в виду MVC, я бы позволил M (odel) выполнять сохранение контекста, а также извлекать из него данные.