我正在构建一个将使用Core Data模型的应用程序。我在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]委托] ),您就可以访问托管对象上下文。我喜欢定义一个静态全局变量来保存对我的app委托的引用,以使生活更轻松。

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

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

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

其他提示

您是否必须使用CoreData模型,或使用NSCoder(NSArchiver,NSKeyedArchiver等)工作?我发现CoreData对于大多数应用来说都是过度的。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top