gpt4 book ai didi

swift - 如何存储基于文档的设置?

转载 作者:搜寻专家 更新时间:2023-11-01 07:27:47 26 4
gpt4 key购买 nike

我有一个 Core Data、基于文档、 Storyboard支持的 OS X 项目。每个文档都有一个特定的日历年和它所在的省/州,所以我创建了一个设置实体,在创建文档时询问这些值。由于某些行为基于这些设置,因此其他自定义 NSManagedObject 类需要请求它们,并且每次我需要该值时都执行 NSFetchRequest 似乎不对。但是,我不确定将值复制到核心数据之外的位置。

  1. AppDelegate - 据我所知,每个应用程序只有一个,而不是每个文档,所以这不合适。

  2. 文档 - 这似乎是最好的,但我不确定稍后如何从 NSManagedObject 中再次找到该文档。我尝试在 Document 中定义一个 var year,然后从调用 theWindow.controller?.document?.year 的 NSManagedObject 中定义,但如果我自己不设置,theWindow 为 nil。此外,theWindow 是全局的,在 AppDelegate 之外,所以即使我确实定义了它(在 Document 的 makeWindowControllers() by theWindow = windowController.window 中),它又变成了每个应用程序,所以每次我调用这一行时,我都会找到最后打开文档的年份(最后一个覆盖窗口的文档),而不是事件文档。我不确定如何找到对当前窗口的引用。

  3. 用户默认值 - 同样,这是每个应用程序,而不是每个文档。我当前的解决方案使用这些默认值,然后在每次调用 windowDidBecomeMain 时重新定义默认值(使用 NSFetchRequest),因此当前文档将用户默认值设置为其自己的设置。

我似乎不太可能是唯一一个想要按文档设置的人,但我似乎找不到任何关于如何/在何处定义这些设置的示例或以前的问题。非常感谢任何帮助!

最佳答案

您正在描述每个文档的元数据,幸运的是 Core Data 支持这种元数据。每个持久存储文件(NSPersistentDocument 使用的文件)都可以有自己的元数据字典,其中包含您需要的任何键和值。它有点像用户默认值,只是它是文档的一部分。此数据是文件的一部分,但与构成实际文档数据的 SQLite 存储区分开。

元数据 API 在 NSPersistentStoreCoordinator 上。您可以通过 self.managedObjectContext.persistentStoreCoordinator 在文档中获取协调器。有几种方法可以读取和写入文档元数据。在元数据中保存您的年份和省/州,然后在打开文档时查找并查阅。

Core Data 有自己不想丢失的元数据——因此在编辑元数据时,请确保查找现有元数据,对其进行修改,然后保存新数据。不要只是为文档分配一个全新的元数据字典。

关于swift - 如何存储基于文档的设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34835578/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com