私のアプリケーションでは、現在開いているドキュメントの名前を変更することができます。これは些細なことであり、うまく動作します。私が理解できない本当に面倒なバグが1つあります。ファイルの名前が変更されると、次にドキュメントを保存しようとしたときにAppKit(親切)がユーザに警告します。ユーザーは「OK」と言い、すべて正常に続きます。これは、アプリケーションの外部の何かがドキュメントを変更したときには意味がありますが、ドキュメント自体が実際に行ったときは意味がありません。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
ああ、これは文書が現在編集されている場合には動作する必要があります。保存されていない変更が存在する場合、ディスクに保存し、文書を閉じ、ファイルを移動してから再度開くと、望ましくない効果が生じる可能性があります。 – d11wtq