Core Data iPhone App的设计模式

Ric*_*kiG 9 iphone design-patterns core-data objective-c nsfetchedresultscontroller

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

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

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

NSFetchedResultsChangeInsert
Run Code Online (Sandbox Code Playgroud)

NSFetchedResultsChangeDelete NSFetchedResultsChangeMove NSFetchedResultsChangeUpdate

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

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

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

谢谢:)

Ale*_*lex 19

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

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

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

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

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