从 NSObject 获取 NSDocument
Posted
技术标签:
【中文标题】从 NSObject 获取 NSDocument【英文标题】:Get NSDocument from NSObject 【发布时间】:2021-01-13 11:16:53 【问题描述】:我使用的是 macOS,objective-c,而不是 ios。 我目前正在重写我的应用程序以基于文档。我现在将每个 NSDocument 文件中需要的数据保存为属性,该属性很好用,包括自动保存。
我可以通过 NSViewControllers 访问该数据
self.view.window.document.mydata
我也可以通过
访问数据[[NSDocumentController sharedDocumentController] currentDocument].mydata
但正如文档对上述方法所说的那样
如果在应用未激活时调用此属性,则该属性的值为 nil。
我的问题是我在文档中有(大量)自定义 NSObject 来处理内容并需要访问该数据。这也发生在后台(使用计时器)。如果应用程序在后台并且没有可用的窗口,那么从 NSObject 访问文档的最佳方式是什么?
我需要在创建时将文档传递给每个对象吗?这感觉不正确。
【问题讨论】:
我认为如果您开发扩展程序,您也会遇到同样的问题,例如快速查看您需要在没有正确文档的情况下访问文档数据的位置。由于您只是在查找数据而不是在完整文档中获得的所有功能,因此您可能需要去除数据的序列化和反序列化,以便您可以在文档内部和文档外部进行操作需要偷看一些东西。 你能举个例子吗? 【参考方案1】:(基于 cmets)这里是一个例子。尽管适用于 iOS。文档本身由存储在多个文件中的大量互连对象组成。在 UIDocument
内部存储文档数据时,我创建一个摘要并将其存储在名为 sum
的单独文件(文档内部)中。
在其他地方我需要提供有关文档的一些信息,但我不需要恢复整个文档或启动所有对象并链接和运行。我只需要从摘要文件中读取。这实际上是第二次迭代,之前我确实恢复了它,但通过在保存文档时创建此摘要来简化它。
也就是说,也许您可以使用这样的摘要来存储您在访问NSDocument
之外的文档数据时需要的基本资料?
总之,这就是那段代码。
NSDictionary < NSString *, NSFileWrapper * > * fDic = self.wrapper.fileWrappers;
NSFileWrapper * sumWrapper = [fDic objectForKey:@"sum"];
这与UIDocument
文件加载和保存挂钩中发生的情况非常相似,并且与NSDocument
的情况相似。
无论如何,一旦我有了sumWrapper
,我就可以从那里提取我需要的内容,而无需恢复完整的文档。但即使我需要完整的文档,我也可以恢复字典中的所有文件包装器并像在文档中一样使用它们。
我希望这会有所帮助。文档可以包含任何内容。在我的情况下,它相当细化并且分布在很多文件中,这使得访问文档的某些部分变得很容易。如果您将所有对象存储到一个文件中,那么这将变得更加困难,除非您将所有这些功能移到一个单独的支持类中,然后您可以在 NSDocument
的内部和外部使用它。
【讨论】:
以上是关于从 NSObject 获取 NSDocument的主要内容,如果未能解决你的问题,请参考以下文章
如何从 NSObject 类获取导航控制器并在 ios 中推送视图控制器
没有在 NSObject 类 ios swift 中获取委托方法的回调