我正在制作一个可以为我学校的人创建类(class)表的应用程序。这是我为该应用程序想到的粗略设计:

我希望我的NSDocument子类代表一个人的时间表。他们的想法是他们打开一个文档,并可以将类(class)表从池中添加到时间表中,然后进行保存,共享,打开等操作。因此,时间表将存储在用户选择的外部文件中。

我想使用CoreData来存储学生可以选择的所有类(class)。这些不会随时间表的创建和编辑而改变,而是可能仅在应用程序启动时检查类(class)信息的更新时才进行更改。

这似乎是构建我的应用程序的逻辑方法。问题是,当我创建基于NSDocument的应用程序并选中use CoreData框时,而不是使它成为具有CoreData功能的基于NSDocument的应用程序,而是使它成为基于NSPersistentDocument的应用程序。

我不认为这是我想要的行为。有没有一种使用CoreData的方法,但是仍然有一个基于NSDocument的应用程序?还是NSPersistentDocument到底应该使用什么?我是否误解了整个NS * Document业务?您对我的应用程序结构有什么建议吗?

谢谢你的帮助!

最佳答案

是的,您可以使用Core Data而不使用NSPersistentDocument。只需直接实例化NSPersistentStoreCoordinatorNSManagedObjectContext。这是一些代码:how do you create a NSManagedObjectContext

如果要在多个NSDocument实例之间共享目录的一个实例,并且不想与每个文档一起保留该目录,这是一个不错的方法。您的应用程序或应用程序代表可以负责加载类(class)目录,而您的文档可以负责加载和保存单个学生的时间表。您必须自己实现,例如使用键控存档器或自己编写plist。

相反,如果您愿意,您可以进一步利用Core Data。用NSManagedObject表示学生时间表,并让NSPersistentDocument处理加载和保存上下文。您可以免费获得许多有用的功能,例如undo-redo。

10-08 20:07