xcode - 在 Xcode 上创建新的基于文档的 Cocoa 应用程序的奇怪事情

标签 xcode macos cocoa core-data nsdocument

我是 cocoa 开发的新手。

我刚刚第一次使用核心数据创建了一个新的文档类型应用程序,并注意到一些奇怪的事情。

  1. AppDelegate实际上是空的,没有任何代码来创建核心数据存储、管理对象上下文,什么也没有。

  2. 添加了两个文件:Document.mDocument.h我理解的是处理应用程序将创建的文档的模型。

  3. 即使没有可见的核心数据初始化代码,Xcode 也会创建一个 .xddatamodeld文件,这是奇怪的部分:Xcode 将文件命名为 Document.xcdatamodeld 。通常 Xcode 会使用与项目相同的名称来命名它。通过将其命名为 Document这就像说这个模型与Document.m有关。和Document.h .

1 和 3 是 Xcode 中的一堆废话还是我遗漏了什么?

你们能解释一下吗?谢谢。

最佳答案

简短回答您的问题:您所看到的行为是由您创建基于文档的应用程序引起的。如果您创建了一个鞋盒(非基于文档的)应用程序,您会看到不同的行为。

关于问题 1,当您创建新文档时,NSPersistentDocument 会为该文档创建一个核心数据存储和一个托管对象上下文。每个文档都有自己的核心数据存储和托管对象上下文。在 AppDelegate 中创建存储和托管对象上下文对于鞋盒应用程序来说很好,因为鞋盒应用程序具有整个应用程序的一组数据。但是,在 AppDelegate 中创建存储和托管对象上下文对于基于文档的应用程序来说没有任何意义,因为可以打开多个文档,每个文档都有自己的存储和托管对象上下文。

关于问题 3,数据模型具有文档的名称,因为基于文档的应用程序创建文档。假设您正在创建一个文档名称为 Screenplay 的剧本创作应用程序。当您在应用程序中选择"file">“新建”时,您将创建一个新的剧本,而不是应用程序的新实例。这就是数据模型具有文档名称而不是应用程序名称的原因。

关于xcode - 在 Xcode 上创建新的基于文档的 Cocoa 应用程序的奇怪事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28495767/

相关文章:

cocoa - 将 subview 带到 mouseDown 的顶部 : AND keep receiving events (for dragging)

ios - 如何修复 "fatal error: unexpectedly found nil while unwrapping an Optional value " socket 按钮

ios - 如何在 Xcode 项目中包含所有图像

iphone - 正在验证我的应用程序,我收到消息 "No identities are available for signing"

swift - 在另一个字符串中定位字符串?

macos - 你如何在 OSX 中调试 libc?

macos - IO资源类

objective-c - Obj-C/Cocoa : Use of Shortcut Recorder Framework, 怎么办?

ios - 为什么当我将一个 TableView 单元格连接到另一个具有模式转场的 View Controller 时,我在 View Controller 中进行了更改?

objective-c - EXC_BAD_ACCESS 从 NSTimer 调用函数