Meine Anwendung ermöglicht es dem Benutzer, Dokumente, die gerade geöffnet sind, umzubenennen. Dies ist trivial, und funktioniert gut, mit einem wirklich ärgerlich Fehler, den ich nicht herausfinden kann. Wenn eine Datei umbenannt wird, warnt AppKit (freundlicherweise) den Benutzer das nächste Mal, wenn sie versuchen, das Dokument zu speichern. Der Benutzer sagt "OK" und alles läuft normal weiter. Das macht Sinn, wenn etwas außerhalb der Anwendung das Dokument geändert hat, aber nicht, wenn es tatsächlich durch das Dokument selbst gemacht wurde.
Der Code sieht ungefähr so aus:
-(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]];
}
Man sollte meinen, dass das ausdrückliche Setzen der neuen URL und des Änderungsdatums auf dem Dokument ausreichen würde, aber leider ist das nicht der Fall. Cocoa erzeugt immer noch die Warnung.
Ich habe versucht, die Reihenfolge zu ändern (die neue URL auf das Dokument zu setzen, DANN die Datei umzubenennen), aber das hilft nicht.
Ich habe auch eine Lösung ausprobiert, die von einem Benutzer in einem alten Beitrag bei CocoaDev vorgeschlagen wurde:
[self performSelector:@selector(_resetMoveAndRenameSensing)];
Aber auch das hält die Warnung nicht auf, und ich vermute, dass es hat eine geeignete Methode zu sein, dies mit der dokumentierten API zu tun. Wie geht Xcode damit um, wenn ein Benutzer auf eine Datei in der Projektstruktur klickt und sie in etwas anderes umbenennt. Es warnt den Benutzer nicht über die Umbenennung, da der Benutzer tatsächlich die Umbenennung durchgeführt.
Was muss ich tun?