Предотвратить предупреждение лист после переименования NSPersistentDocument

Всякий раз, когда мой документ переименовывается, автосохранение блокируется, и первое сохранение после переименования представляет изображенное сообщение.

Технически это не проблема, так как любая кнопка возвращает пользователя в состояние автосохранения, но это сбивает с толку моих пользователей.

Я пытался подключить метод

-(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 ответ

Решение

Ответ от дружественного инженера Apple заключается в том, что это происходит, когда дата модификации в базовом файле sqlite отличается от 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];
}
Другие вопросы по тегам