构建Core Data的收藏列表

时间:2010-05-04 16:02:16

标签: iphone cocoa-touch core-data

我正在使用两个标签构建应用。第一个选项卡有一个主表视图,连接到行的详细视图。第二个选项卡将根据用户通过点击详细视图上的按钮向其添加内容来显示tableView。

我的问题是这个。这样做的正确设计模式是什么?我是否创建了第二个ManagedObjectContext / ManagedObjectContextID,然后将该上下文保存到新的持久存储中,或者可以将MOC保存到现有存储中而不影响原始tableview?

我看过CoreData Recipes和CoreData Books,虽然书籍确实涉及多个MOC,但它们都不涉及多家商店。任何参考都会很棒。

1 个答案:

答案 0 :(得分:1)

单个NSManagedObjectContext对于此设计来说已经足够了。您要做的是实现依赖注入设计模式。这意味着当您创建每个选项卡时,您将单个NSManagedObjectContext实例传递到每个选项卡中。然后,每个NSViewController负责根据需要访问NSManagedObjectContext

更新

如果您看到相同的数据,那么您的'NSFetchedResultsController'就会出现问题,而不是'NSManagedObjectContext'。 'NSManagedObjectContext'可以访问所有数据,'NSFetchedResultsController'是基于它的所有过滤'NSFetchRequest'。

也许您应该为每个控制器发布'NSFetchedResultsController'(通过在此处编辑您的问题),以便我们可以看到正在发生的事情。

更新

MOC永远不会被毁坏。您只需要多个引用/指针指向同一个MOC。 MOC是您正在访问的NSManagedObject个实例的暂存器。当您在该MOC上调用-save:时,它会在该暂存器中进行更改并将其保留在磁盘上。

除了一些非常非常不寻常的情况外,你只有永远每个线程需要一个MOC。在您到目前为止所描述的设计中,一个MOC 更多已足够。