如何停用窗口恢复?

时间:2013-10-07 11:49:31

标签: macos cocoa nsdocument nspersistentdocument

我使用的是SDK 10.8。

我正在对NSPersistentDocument进行子类化(但问题可能会让人们感兴趣的是NSDocument子类)并且我想停用窗口恢复。到目前为止,这就是我所做的:

-(void)restoreStateWithCoder:(NSCoder *)coder
{
    NSLog(@"No 1") ;
}


-(void)restoreDocumentWindowWithIdentifier:(NSString *)identifier
                                     state:(NSCoder *)state
                         completionHandler:(void (^)(NSWindow *, NSError *))completionHandler
{
    NSLog(@"No 2") ;
}

问题在于,当我尝试在我的应用程序中创建新文档时,不会显示任何窗口。

停用窗口恢复的正确方法是什么?

2 个答案:

答案 0 :(得分:3)

  

此窗口恢复功能使我的应用程序无法启用,例如在崩溃后(或我在xcode中单击停止)。我不希望我的应用的用户遇到同样的问题,也无法再启动该应用。

只有当您的存储状态损坏或者您更改了存储它的密钥时,才会出现这种情况。

在正常情况下,存在状态恢复以在发生崩溃时保存用户数据(他们没有手动保存) - 当应用程序崩溃时,您的用户将想要它在那里它们。

出于调试目的,您可以在Xcode方案中禁用状态恢复:

In Xcode 4's scheme editor, for the Run verb, on the Options tab, check the “Launch application without state restoration” checkbox.

答案 1 :(得分:0)

以下作品,但我必须承认,我不知道为什么!

-(void)restoreDocumentWindowWithIdentifier:(NSString *)identifier
                                     state:(NSCoder *)state
                         completionHandler:(void (^)(NSWindow *, NSError *))completionHandler 
{
    DDLogWarn(@"Method 'restoreDocumentWindowWithIdentifier...' overidden") ;

    [[NSDocumentController sharedDocumentController] newDocument:nil] ;
}


- (void)restoreStateWithCoder:(NSCoder *)coder 
{
    DDLogWarn(@"Method 'restoreStateWithCoder...' overidden") ;

    [[NSDocumentController sharedDocumentController] newDocument:nil] ;
}