繁体   English   中英

Core Data iPhone App的设计模式

[英]Design pattern for Core Data iPhone App

我正在构建一个将使用核心数据模型的应用程序。 我在Objective C上很新,我的常用设计模式并不适用于Core Data和Objective C,至少我似乎无法找到确认它们的例子。

我已经浏览了Apple Developer示例和intertubes上的不同来源。

似乎要利用Core Data我需要将managedObjectContext传递给我的每个viewControllers,让viewController实现NSFetchedResultsControllerDelegate,然后实现每个方法进行获取并随后实现

NSFetchedResultsChangeInsert

NSFetchedResultsChangeDelete NSFetchedResultsChangeMove NSFetchedResultsChangeUpdate

这在每个viewController中增加了大约100行代码,并且它是我反复编写的相同代码的90%。 另外,我必须传递一切并跟踪它的内存占用。

在其他语言中,我将构建一个包含几个类的单例模型,这些类包含根据请求维护和提供数据的方法,可从任何地方获得。 我似乎无法在Objective C中采用这种方法。如果我在哪里构建一个静态类,它接受了一个managedObjectContext并返回了我需要的东西,我仍然需要将managedObjectContext传递给每个视图,它不会是异步,就像我实现在结果准备就绪时调用的委托方法一样。

我希望这是有道理的,并且有人可以确认没有其他合理的方法来做到这一点,或者帮助指出我的方向以良好的方式包装它。

谢谢:)

核心数据并不像您描述的那么复杂。

通常,iPhone应用程序具有“主”托管对象上下文,该上下文通常由应用程序委托拥有。 只要您可以获得应用程序委托(提示: [[UIApplication sharedApplication] delegate] ),您就可以访问托管对象上下文。 我喜欢定义一个静态全局变量来保存对我的app委托的引用,以使生活更轻松。

NSFetchedResultsController实例和UITableView实例之间通常存在一对一的对应关系。 除了填充表视图外,您需要一个NSFetchedResultsController是非常罕见的。 如果您有许多类似的视图(例如,一个标签栏可以让您以不同的方式查看iPod应用程序的相同数据),那么您应该创建一个配置NSFetchedResultsController的单个基类并派生您的特定视图控制器从那以后。

现在,当您创建视图控制器以编辑对象时,通常最好在单独的托管对象上下文中执行此操作。 如果用户取消,您只需丢弃上下文,更改就会消失。 同样,您实际上并不需要NSFetchedResultsController ,因为这些视图仅涉及单个对象。

完成编辑后,您save:托管对象上下文。 管理其他托管对象上下文的对象应实现NSFetchedResultsControllerDelegate方法以使表视图保持同步。 同样,这可以在基类中实现,因此您可以为相关的视图控制器概括此功能。

你绝对必须使用CoreData模型,还是使用NSCoder(NSArchiver,NSKeyedArchiver等)工作? 我发现CoreData对大多数应用程序来说都是过度杀伤力。

另外,你能澄清为什么你不能采用单身人士的方法吗? 我在许多应用程序中使用了单件工厂而没有任何问题。 定义在共享(单例)实例上运行的类级方法相当容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM