1

我正在使用 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") ;
}

问题是当我尝试在我的应用程序中创建一个新文档时,没有显示任何窗口。

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

4

2 回答 2

3

这个窗口恢复功能使我的应用程序无法启动,例如在崩溃之后(或者我在 xcode 中单击停止)。我不希望我的应用程序的用户面临同样的问题并且无法再启动该应用程序。

仅当您的存储状态已损坏或您更改了存储它的密钥时,这才应该是正确的。

在正常情况下,状态恢复的存在是为了在发生崩溃时保存用户数据(他们没有手动保存)——当应用程序崩溃时,您的用户会希望它在那里。

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

在 Xcode 4 的方案编辑器中,对于 Run 动词,在 Options 选项卡上,选中“Launch application without state restore”复选框。

于 2014-01-24T09:19:42.640 回答
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] ;
}
于 2013-10-07T11:58:43.783 回答