私のアプリケーションでは、ユーザーは現在開いているドキュメントの名前を変更できます。これは些細なことで、問題なく動作しますが、私には理解できない本当に厄介なバグが 1 つあります。ファイルの名前が変更されると、ユーザーが次にドキュメントを保存しようとしたときに、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 はどのように処理しますか。ユーザーが実際に名前変更を実行したため、名前変更についてユーザーに警告しません。
私は何をする必要がありますか?