Шаблон сохранения основных данных делегата - PullRequest
1 голос
/ 04 октября 2011

Я использую 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];
}

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

Ответы [ 3 ]

0 голосов
/ 31 января 2012

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

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

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

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

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

0 голосов
/ 20 февраля 2012

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

0 голосов
/ 04 октября 2011

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

...