Mi aplicación permite al usuario cambiar el nombre de los documentos que están actualmente abiertos. Esto es trivial, y funciona bien, con un error realmente molesto que no puedo descifrar. Cuando se cambia el nombre de un archivo, AppKit (amablemente) advierte al usuario la próxima vez que intente guardar el documento. El usuario dice "OK" y todo continúa normalmente. Esto tiene sentido cuando algo externo a la aplicación cambió el documento, pero no cuando el documento lo hizo realmente.Prevenga la advertencia cuando el archivo NSDocument se renombra (programáticamente)
El código es algo como esto:
-(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]];
}
Uno podría pensar que la fijación de forma expresa la nueva URL y la fecha de modificación en el documento sería suficiente, pero por desgracia no lo es. Cacao todavía genera la advertencia.
He intentado cambiar el orden (establecer la nueva URL en el documento, ENTONCES renombrar el archivo) pero esto no ayuda.
He intentado también una solución sugerida por un usuario en un antiguo puesto encima en CocoaDev:
[self performSelector:@selector(_resetMoveAndRenameSensing)];
Incluso esto no impide que la advertencia sin embargo, y supongo que hay tiene que ser una forma adecuada de hacerlo utilizando la API documentada. ¿Cómo maneja Xcode las cosas cuando un usuario hace clic en un archivo en el árbol del proyecto y lo renombra a otra cosa? No advierte al usuario sobre el cambio de nombre, ya que el usuario realmente realizó el cambio de nombre.
Si alguien puede arrojar alguna luz sobre lo que podría necesitar hacer, sería genial, ¡gracias!
He comenzado la recompensa por ayuda con esto. Realmente estoy llegando a ninguna parte con ella, lamentablemente. Un caso de prueba simple es simplemente crear una aplicación de documento en blanco que abre un archivo .txt (o cualquier cosa en realidad), agregar un elemento de menú cuya acción cambia el nombre del archivo abierto a otra cosa (y actualiza los objetos del documento con la nueva URL). Estoy intentando eludir la advertencia cuando intento guardar el archivo la primera vez después del cambio de nombre. – d11wtq
Ah, y esto debe funcionar si el documento está actualmente editado. Guardar en el disco, cerrar el documento, mover el archivo y luego volver a abrirlo podría tener efectos no deseados si existen cambios no guardados. – d11wtq