核心数据委托保存模式

时间:2011-10-04 14:14:48

标签: objective-c ios core-data

我在iOS中使用CoreData。 我有一个模态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 :(得分:0)

从架构的角度来看,您应该创建一个负责核心数据操作的单独管理器类。从技术角度来看,只要你在数据来源的同一个线程上保存(root或modal VC)就没有关系。

答案 1 :(得分:0)

我知道这有点晚了,但对于遇到这个问题的其他人来说,我会为Levend的回答添加更多内容。

是的,您应该有一个单独的管理器类来处理操作(可能是类本身)。

我认为如果你的模态需要处理验证,那么在调用委托之前,它会验证对象。如果它有错误,你可以在那里处理它。如果它通过了验证,那么您可以将有效对象传递给委托。因此,委托可以假设任何传递给它的对象都是有效的。

至于你应该保存哪个课程,我认为这只是一个偏好的事情。但我建议你在核心数据模型中有一个保存方法。

我最近遇到的是mogenerator,它应该有助于管理CoreData类。我还没累,但听起来不错。

答案 2 :(得分:0)

考虑到MVC,我会让M(odel)执行保存上下文以及从中获取数据。