Мое приложение позволяет пользователю переименовывать документы, которые в данный момент открыты. Это тривиально, и работает отлично, с одной действительно раздражающей ошибкой, которую я не могу понять. Когда файл переименовывается, AppKit (любезно) предупреждает пользователя при следующей попытке сохранить документ. Пользователь говорит «ОК», и все продолжается как обычно. Это имеет смысл, когда что-то внешнее по отношению к приложению изменило документ, но не тогда, когда это было фактически сделано самим документом.
Код выглядит примерно так:
-(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 обрабатывает вещи, когда пользователь щелкает файл в дереве проекта и переименовывает его во что-то другое. Он не предупреждает пользователя о переименовании, поскольку пользователь фактически выполнил переименование.
Если кто-нибудь сможет пролить свет на то, что мне может понадобиться, это было бы здорово, спасибо!