Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode NSDocument和CoreData是可能的组合,还是NSPersistentDocument是唯一的方法?_Xcode_Macos_Cocoa_Core Data_Nsdocument - Fatal编程技术网

Xcode NSDocument和CoreData是可能的组合,还是NSPersistentDocument是唯一的方法?

Xcode NSDocument和CoreData是可能的组合,还是NSPersistentDocument是唯一的方法?,xcode,macos,cocoa,core-data,nsdocument,Xcode,Macos,Cocoa,Core Data,Nsdocument,我正在制作一个应用程序,为我学校的人创建课程时间表。这是我对应用程序的粗略设计: 我希望我的NSDocument子类表示个人的时间表。其想法是,他们打开一个文档,可以将课程池中的课程添加到他们的时间表中,然后保存、共享、打开等。因此,时间表将存储在用户选择的外部文件中 我想使用CoreData存储学生可以选择的所有课程。这些将不会随着时间表的创建和编辑而改变,而是可能只有在应用程序启动时,当它检查课程信息的更新时才会改变 这似乎是构建我的应用程序的合乎逻辑的方式。问题是,当我创建一个基于NSDo

我正在制作一个应用程序,为我学校的人创建课程时间表。这是我对应用程序的粗略设计:

我希望我的NSDocument子类表示个人的时间表。其想法是,他们打开一个文档,可以将课程池中的课程添加到他们的时间表中,然后保存、共享、打开等。因此,时间表将存储在用户选择的外部文件中

我想使用CoreData存储学生可以选择的所有课程。这些将不会随着时间表的创建和编辑而改变,而是可能只有在应用程序启动时,当它检查课程信息的更新时才会改变

这似乎是构建我的应用程序的合乎逻辑的方式。问题是,当我创建一个基于NSDocument的应用程序并选中
使用CoreData
框时,它不是使用CoreData工具使其成为一个基于NSDocument的应用程序,而是使其成为一个基于NSPersistentDocument的应用程序

我认为这不是我想要的行为。是否有一种方法可以使用CoreData,但仍然有一个基于NSDocument的应用程序?或者,我到底应该使用什么样的文档?我是否误解了整个NS*文档业务?你对我的申请结构有什么建议吗


谢谢你的帮助

是的,您可以使用核心数据,而无需使用
NSPersistentDocument
。只需直接实例化
NSPersistentStoreCoordinator
NSManagedObjectContext
。下面是一些代码:

如果您希望在多个
NSDocument
实例之间共享目录的一个实例,并且不希望将目录与每个文档一起保存,这是一个很好的方法。您的应用程序或应用程序代表可以负责加载课程目录,您的文档可以负责加载和保存单个学生的时间表。您必须自己实现这一点,比如说,使用键控archiver,或者自己编写plist


相反,如果您愿意,您可以进一步利用核心数据。使用
NSManagedObject
s表示学生时间表,并让
NSPersistentDocument
处理加载和保存上下文。你可以免费获得许多有用的功能,如撤销–重做。

你说你想使用核心数据来存储学生可以选择的所有课程。您是否也会使用核心数据在NSDocument课程中存储单个学生的时间表?我认为这是决定是否使用NSPersistentDocument的第二个问题。@noa:不,我计划将学生的时间表存储在用户选择的外部文件中。我想你是说,使用plist或键控archiver之类的东西?您可以让用户选择一个单独的文件,并且仍然使用核心数据。这就是NSPersistentDocument帮助您做的。啊,谢谢您的扩展!我认为我的原始问题中没有包含足够的解释。谢谢