Mon application permet à l'utilisateur de renommer les documents actuellement ouverts. Ceci est trivial, et fonctionne bien, avec un bug vraiment ennuyeux que je ne peux pas comprendre. Lorsqu'un fichier est renommé, AppKit (avec gentillesse) avertit l'utilisateur lors de la prochaine tentative de sauvegarde du document. L'utilisateur dit "OK" et tout continue comme d'habitude. Cela a du sens quand quelque chose d'extérieur à l'application a changé le document, mais pas quand il a été réellement fait par le document lui-même.Empêche l'avertissement lorsque le fichier NSDocument est renommé (par programme)
Le code ressemble à ceci:
-(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]];
}
On pourrait penser que la mise expressément la nouvelle date d'URL et de modification sur le document serait suffisant, mais malheureusement, ce n'est pas. Le cacao génère toujours l'avertissement.
J'ai essayé de changer l'ordre (en définissant la nouvelle URL sur le document, puis en renommant le fichier) mais cela n'aide pas.
J'ai aussi essayé une solution proposée par un utilisateur sur un ancien poste sur au CocoaDev:
[self performSelector:@selector(_resetMoveAndRenameSensing)];
Même cela ne l'empêche pas l'avertissement cependant, et je devine il a être une bonne façon de le faire en utilisant l'API documentée. Comment Xcode gère-t-il les choses lorsqu'un utilisateur clique sur un fichier dans l'arborescence du projet et le renomme en autre chose? Il ne prévient pas l'utilisateur du changement de nom, car l'utilisateur a effectivement renommé le fichier.
Si quelqu'un peut faire la lumière sur ce que je devrais faire, ce serait génial, merci!
J'ai commencé la générosité pour l'aide avec ceci. Je n'arrive vraiment à rien avec ça malheureusement. Un cas de test simple consiste simplement à créer une application de document vierge qui ouvre un fichier .txt (ou quelque chose de vraiment), ajouter un élément de menu dont l'action renomme le fichier ouvert en autre chose (et met à jour les objets document avec la nouvelle URL). J'essaie de contourner l'avertissement quand essayer de sauver le fichier la première fois après le renommer. – d11wtq
Oh, et cela doit fonctionner si le document est en cours d'édition. L'enregistrement sur le disque, la fermeture du document, le déplacement du fichier et sa réouverture peuvent avoir des effets indésirables si des modifications non enregistrées existent. – d11wtq