NSPersistentDocument重命名后防止警告表

时间:2013-11-10 21:40:51

标签: objective-c macos nsdocument nspersistentdocument

每当我的文档被重命名时,自动保护被阻止,重命名后的第一次保存会显示图片消息。

enter image description here

从技术上讲,这不是一个问题,因为任何一个按钮都会将用户带回到可自动恢复的状态,但这对我的用户来说很困惑。

我试过挂钩方法

-(void)moveToURL:(NSURL *)url completionHandler:(void (^)(NSError *))completionHandler
{
    void(^takeoverblock)(NSError *error) = ^(NSError *error){

        if (completionHandler) {
            completionHandler(error);
        }

        if (!error) {

            [self updateChangeCountWithToken:[self changeCountTokenForSaveOperation:NSAutosaveInPlaceOperation] forSaveOperation:NSAutosaveInPlaceOperation];
        }

    };

    [super moveToURL:url completionHandler:takeoverblock];
}

并使用各种风格的updateChangeCount:updateChangeCountWithToken:但警告始终如一。

如何在重命名/移动后将文档置于恢复标准自动保存行为的状态。?

1 个答案:

答案 0 :(得分:2)

当底层sqlite文件上的modificationDate与fileModificationDate实例上的NSPersistentDocument属性不同时,会出现答案via a friendly Apple engineer,以解决重置fileModificationDate之后的问题移动

像这样覆盖moveToUrl:

-(NSDate *)modDateForURL:(NSURL *)url
{
    NSDictionary *dict = [[NSFileManager defaultManager] attributesOfItemAtPath:[url path] error:NULL];
    return dict[NSFileModificationDate];
}


-(void)moveToURL:(NSURL *)url completionHandler:(void (^)(NSError *))completionHandler
{

    void(^takeoverblock)(NSError *error) = ^(NSError *error){

        if (completionHandler) {
            completionHandler(error);
        }

        if (!error) {

            self.fileModificationDate = [self modDateForURL:self.fileURL];

        }

    };

    [super moveToURL:url completionHandler:takeoverblock];
}