【发布时间】:2013-06-16 03:17:36
【问题描述】:
在我的项目中,我需要能够区分用户创建的文档和在应用程序启动时由 restoreStateWithCoder 恢复的文档之间的区别,因为对于新文档需要做一些事情,而不是恢复的文档。我该怎么做?
【问题讨论】:
标签: cocoa nswindow document-based
在我的项目中,我需要能够区分用户创建的文档和在应用程序启动时由 restoreStateWithCoder 恢复的文档之间的区别,因为对于新文档需要做一些事情,而不是恢复的文档。我该怎么做?
【问题讨论】:
标签: cocoa nswindow document-based
如何子类化“NSDocument”并将该子类用于您的文档?
然后,您可以捕获“restoreStateWithCoder”,并为那些从磁盘恢复且未通过“文件 -> 新建”命令重新创建的文档设置唯一标志(例如 BOOL 属性)。
您也可以尝试"method swizzle"“restoreStateWithCoder”,但您必须决定在哪个对象中设置什么属性。
【讨论】:
[为 Swift 回答这个问题,但总体思路也适用于 Objective-C]
当文档是全新的时,您通常会调用以下函数:
convenience init(type tyepName: String) throws
您可以在该函数中设置一个标志(例如 needSpecialHandling = true,一个最初初始化为 false 的变量)来说明您是否需要对此类情况进行一些特殊处理。
然后在makeWindowControllers() 函数中使用该变量来触发调用特殊代码(如果是true),就像在windowControllerDidLoadNib 函数中调用它一样。
【讨论】: