autosaveWithCompletionHandler:(UIDocument)覆盖问题

Posted

技术标签:

【中文标题】autosaveWithCompletionHandler:(UIDocument)覆盖问题【英文标题】:autosaveWithCompletionHandler: (UIDocument) overriding issue 【发布时间】:2013-08-04 06:35:58 【问题描述】:

不覆盖autosaveWithCompletionHandler:,无论何时更改文档( [doc updateChangeCount: UIDocumentChangeDone]) autosaveWithCompletionHandler: 被定期调用。

但是如果我重写这个方法,它只会被调用一次。

文档已更改 -> 时间已过... -> 已调用重写方法 -> 文档已更改 -> 时间已过... -> 时间已过... -> 文档已更改-> 时间流逝... -> 时间流逝...

我通过调用[doc updateChangeCount: UIDocumentChangeDone]来更改文档。

(覆盖方法)

- (void) autosaveWithCompletionHandler: (void (^(BOOL success))completionHandler                           

    if ([self hasUnsavedChanges]) 
        [self saveToURL: self.fileURL forSaveOperation: UIDocumentSaveForOverwriting completionHandler: ^(BOOL success) 
            if (success) 
                NSLog(@"%@ has been autosaved", [self description]);
                completionHandler(YES);
            
            else 
                NSLog(@"Failed to autosave %@", [self description]);
                completionHandler(NO);
            
        ];
    
   // autosaveWithCompletionHandler:

感谢您的阅读。

【问题讨论】:

【参考方案1】:

您不应该覆盖saveWithCompletionHandler:autosaveWithCompletionHandler:;这些方法对私有属性进行更改,这有助于系统确定对象是否需要保存,并且当您覆盖这些方法时,不会进行这些更改。相反,您应该覆盖 contentsForType:error:

【讨论】:

我已经开始处理其他人的代码,它确实覆盖了这个...... - (void)autosaveWithCompletionHandler:(void (^)(BOOL success))completionHandler [super autosaveWithCompletionHandler:completionHandler]; [[NSNotificationCenter defaultCenter] postNotificationName:DOCUMENT_AUTOSAVE_OPERATION object:self];为什么这会是一个问题,如果我不覆盖,我应该如何解决通知的需要 这可能没问题,但我不确定您为什么需要该通知。 谢谢。原因看起来像是调用了一个 NSLogs 保存的方法,该方法又调用了另一个方法来进行重复保存。并且该方法发出 another (不同类型)的保存通知。 ://

以上是关于autosaveWithCompletionHandler:(UIDocument)覆盖问题的主要内容,如果未能解决你的问题,请参考以下文章