【问题标题】:NSPersistentDocument and File menu entriesNSPersistentDocument 和文件菜单项
【发布时间】:2019-07-04 02:51:05
【问题描述】:

我使用 Xcode 9.2 创建了一个全新的 macOS 应用程序,并在项目模板中选择了“创建基于文档的应用程序”和“使用核心数据”。

我进行了四项更改:

  1. 编辑 CoreData 模型以添加一个名为“Entity”的实体,该实体具有两个字符串属性“name”和“content”。

  2. 使用“Editor->Create NSManagedObject subclass”为Entity生成便捷方法。

  3. 将默认的 Window.xib 替换为新的空 Window.xib。

  4. 将以下代码添加到 Document.swift,其中包含我的 NSPersistentDocument 子类:

    override func windowControllerDidLoadNib(_ windowController: NSWindowController) 
    {
        super.windowControllerDidLoadNib(windowController)
    
        let entity = Entity(context: managedObjectContext!)
        entity.name = "TestEntity"
        entity.content = "test content goes here"
    
        Swift.print("edited: \(self.isDocumentEdited)") // prints "NO"
    }
    

我认为这足以自动启用 File->Save... 菜单项。它不是。它仍然灰显。打印出来的isDocumentEdited 的值为NO

但是,当我退出应用程序时,会在标准对话框中询问我Do you want to save the changes made to the document "Untitled"?。所以 Core Data 知道我的更改,但似乎它可能没有将它们与文档窗口联系起来......?

我在这里缺少什么?我需要做什么才能将前台文档窗口与NSPersistentDocument 实例相关联?

【问题讨论】:

    标签: swift core-data


    【解决方案1】:

    解决了。我在新的 Document.xib 中遗漏了以下 3 件事:

    1. 文件的所有者 -> 类需要设置为Document
    2. 我需要向文件所有者 window 属性添加一个引用出口
    3. 我需要将 delegate 属性中的 Outlet 添加到 File's Owner

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-09
      • 1970-01-01
      • 1970-01-01
      • 2012-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多