我的应用程序允许用户重命名当前打开的文档。这是微不足道的,并且工作正常,有一个我无法弄清楚的非常烦人的错误。当文件被重命名时,AppKit(友好地)会在用户下次尝试保存文档时警告用户。用户说“OK”,一切照常进行。当应用程序外部的某些东西更改了文档时,这是有道理的,但当它实际上是由文档本身完成时则不然。
代码是这样的:
-(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 和修改日期就足够了,但遗憾的是事实并非如此。Cocoa 仍然会产生警告。
我尝试更改顺序(在文档上设置新 URL,然后重命名文件),但这无济于事。
我还尝试了用户在 CocoaDev 上的旧帖子上建议的修复:
[self performSelector:@selector(_resetMoveAndRenameSensing)];
然而,即使这样也不会停止警告,我猜必须有一种正确的方法来使用文档化的 API 来做到这一点。当用户单击项目树上的文件并将其重命名为其他内容时,Xcode 如何处理事情。它不会警告用户重命名,因为用户实际上执行了重命名。
我需要做什么?