0

ドキュメントの名前が変更されるたびに、自動保存がブロックされ、名前変更後の最初の保存で画像のメッセージが表示されます。

ここに画像の説明を入力

どちらのボタンもユーザーを自動保存可能な状態に戻すため、技術的には問題ではありませんが、私のユーザーにとっては混乱を招きます。

メソッドをフックしてみました

-(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];
}

and のさまざまなフレーバーを使用するupdateChangeCount:updateChangeCountWithToken: 、警告が一貫して表示されます。

名前変更/移動後に標準の自動保存動作を再開する状態にドキュメントを配置するにはどうすればよいですか?

4

1 に答える 1

3

フレンドリーな Apple エンジニアによる回答は、基礎となる sqlite ファイルの modifiedDate がインスタンスのfileModificationDateプロパティと異なる場合に表示されるため、移動後にNSPersistentDocumentリセットを解決することです。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];
}
于 2013-11-12T20:34:40.780 に答える