Предотвратить предупреждение лист после переименования 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];
}