Мое приложение позволяет пользователю переименовывать документы, которые в настоящее время открыты. Это тривиально и прекрасно работает, с одной действительно раздражающей ошибкой, которую я не могу понять. Когда файл переименовывается, AppKit (любезно) предупреждает пользователя в следующий раз, когда они попытаются сохранить документ. Пользователь говорит «ОК», и все продолжается как обычно. Это имеет смысл, когда что-то внешнее по отношению к приложению изменило документ, но не тогда, когда это было сделано самим документом.Предотвращение предупреждения, когда файл NSDocument (программно) переименован
код выглядит примерно так:
-(void)renameDocumentTo:(NSString *)newName {
NSURL *newURL = [[[self fileURL] URLByDeletingLastPathComponent]
URLByAppendingPathComponent:newName];
NSFileManager *fileManager = [NSFileManager defaultManager];
[fileManager moveItemAtURL:[self fileURL] toURL:newURL];
NSDictionary *attrs = [fileManager attributesForItemAtPath:[newURL path] error:NULL];
[self setFileURL:newURL];
[self setFileModificationDate:[attrs fileModificationDate]];
}
Можно было бы подумать, что явно установив новый URL и модификации даты в документе будет достаточно, но, к сожалению, это не так. Какао все еще генерирует предупреждение.
Я попытался изменить порядок (установив новый URL-адрес в документе, ТОГО переименование файла), но это не поможет.
Я также попытался исправить предложенный пользователем на старом посту по крайней CocoaDev:
[self performSelector:@selector(_resetMoveAndRenameSensing)];
Даже это не останавливает предупреждение, однако, и я предполагаю, что там имеет быть правильный способ сделать это, используя документированный API. Как Xcode обрабатывает вещи, когда пользователь щелкает файл в дереве проекта и переименовывает его в другое. Он не предупреждает пользователя о переименовании, поскольку пользователь действительно выполнил переименование.
Если кто-нибудь может пролить свет на то, что мне может понадобиться, это было бы здорово, спасибо!
Я начал щедрость за помощь в этом. К сожалению, я действительно не получаю нигде. Простой тестовый пример - просто создать приложение для пустого документа, которое открывает файл .txt (или что-то действительно), добавляет элемент меню, действие которого переименовывает открытый файл в другое (и обновляет объекты документа новым URL-адресом). Я пытаюсь обойти предупреждение, когда пытаюсь сохранить файл в первый раз после переименования. – d11wtq 2010-12-07 11:27:19
О, и это должно работать, если документ в настоящее время редактируется. Сохранение на диск, закрытие документа, перемещение файла, а затем его повторное открытие могут иметь нежелательные последствия, если существуют несохраненные изменения. – d11wtq 2010-12-07 11:28:41