-1

我在 macOS,objective-c,而不是 iOS。我目前正在重写我的应用程序以基于文档。我现在将每个 NSDocument 文件中的所需数据保存为属性,该属性非常有用,包括自动保存。

我可以通过 NSViewControllers 访问该数据

self.view.window.document.mydata

我也可以通过

[[NSDocumentController sharedDocumentController] currentDocument].mydata

但正如文档对上述方法所说的那样

如果在应用不活动时调用此属性,则该属性的值为 nil。

我的问题是我在文档中有(大量)自定义 NSObject 来处理内容并需要访问该数据。这也发生在后台(使用计时器)。如果应用程序在后台并且没有可用的窗口,那么从 NSObject 访问文档的最佳方式是什么?

我需要在创建时将文档传递给每个对象吗?这感觉不正确。

4

1 回答 1

0

(基于评论)这是一个例子。尽管适用于 iOS。文档本身由存储在多个文件中的大量互连对象组成。在UIDocument存储文档数据时,我创建了一个摘要并将其存储在一个名为sum.

在其他地方,我需要提供有关文档的一些信息,但我不需要恢复整个文档或启动所有对象并链接和运行。我只需要从摘要文件中读取。这实际上是第二次迭代,之前我确实恢复了它,但通过在保存文档时创建此摘要来简化它。

也就是说,也许您可​​以使用这样的摘要来存储您在访问外部文档数据时需要的基本内容NSDocument

无论如何,这是那段代码。

NSDictionary < NSString *, NSFileWrapper * > * fDic = self.wrapper.fileWrappers;
NSFileWrapper * sumWrapper = [fDic objectForKey:@"sum"];

UIDocument这与文件加载和保存挂钩内部发生的情况非常相似,并且与NSDocument.

无论如何,一旦我有了它,sumWrapper我就可以从那里提取我需要的东西,而不必恢复完整的文档。但即使我需要完整的文档,我也可以恢复字典中的所有文件包装器并像在文档中一样使用它们。

我希望这有帮助。文档可以包含任何内容。在我的情况下,它相当细化并且分布在很多文件中,这使得访问文档的某些部分变得很容易。如果您将所有对象存储到一个文件中,那么除非您将所有这些功能移动到一个单独的支持类中,然后您可以在NSDocument.

于 2021-01-13T12:23:14.513 回答