Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Cocoa应用程序中区分新文档和恢复的文档_Cocoa_Nswindow_Document Based - Fatal编程技术网

在Cocoa应用程序中区分新文档和恢复的文档

在Cocoa应用程序中区分新文档和恢复的文档,cocoa,nswindow,document-based,Cocoa,Nswindow,Document Based,在我的项目中,我需要能够区分用户创建的文档和restoreStateWithCoder在应用程序启动时恢复的文档之间的区别,因为需要为新文档做一些事情,但不是恢复的文档。我如何才能做到这一点?如何将“NSDocument”子类化,并将该子类用于您的文档 然后,您可以捕获“restoreStateWithCoder”,并为从磁盘还原而不是通过“File->New”命令新创建的文档设置唯一标志(例如BOOL属性) 您也可以尝试“restoreStateWithCoder”,但您必须决定在哪个对象中设

在我的项目中,我需要能够区分用户创建的文档和restoreStateWithCoder在应用程序启动时恢复的文档之间的区别,因为需要为新文档做一些事情,但不是恢复的文档。我如何才能做到这一点?

如何将“
NSDocument
”子类化,并将该子类用于您的文档

然后,您可以捕获“
restoreStateWithCoder
”,并为从磁盘还原而不是通过“File->New”命令新创建的文档设置唯一标志(例如BOOL属性)


您也可以尝试“
restoreStateWithCoder
”,但您必须决定在哪个对象中设置什么属性。

[为Swift回答这个问题,但总体思路也适用于Objective-C]

当文档是全新的时,通常会调用以下函数:

convenience init(type tyepName: String) throws
您可以在该函数中设置一个标志(例如
needSpecialHandling=true
,该变量最初初始化为
false
),以说明是否需要对此类情况进行特殊处理


然后在
makeWindowController()
函数中,使用该变量触发调用特殊代码(如果
true
)与您在
WindowControllerIDloadNib
函数中调用它的方式相同。

我已经在使用项目附带的NSDocument子类,并实现restoreStateWithCoder以实现自定义恢复指令。问题是原始帖子中提到的准备操作发生在windowControllerDidLoadNib中,这发生在恢复之前,呈现任何自定义标志都没有意义。您在做什么?当您意识到文件已还原且不是全新的文件时,为什么不能禁用或隐藏它们?该应用程序实际上是一个web浏览器,因此即使我使用多文档体系结构,也没有真正的文档。我使用WindowControllerdLoadNib在打开一个新窗口时创建一个新选项卡,并根据用户偏好选择加载一个主页。这与选项卡恢复冲突。在恢复时,我可以在创建后立即清除选项卡数组,但这似乎效率低下且浪费巨大。