Pregunta

Estoy desarrollando una aplicación que actualmente está en arena. Actúa como un editor de texto básico. Recientemente, quería probar lo que sucede cuando abro un archivo en mi aplicación y otra aplicación al mismo tiempo, hacer una actualización en una aplicación y luego ver la actualizada en la otra. Estoy usando Coda o BBEdit Como mis editores alternativos. Si apago Sandboxing, entonces este problema no existe. Sin embargo, dado que las aplicaciones deben ser arenadas a partir del 1 de marzo, prefiero implementar una solución en lugar de esperar y ver.

Cuando abro ambos archivos y hago una edición en mi aplicación y luego cambio a la otra aplicación, los cambios se reflejan para que esos editores tengan la versión simplemente guardada en mi aplicación. Sin embargo, si realizo lo contrario de guardar desde su aplicación y luego me mudé a la mía, sin alegría. Sin realizar ninguna acción, la consola informa dos errores específicos: deny file-issue-extension y deny file-write-data. La aplicación parece estar perdiendo privilegios para editar el documento, ya que fue cambiado por un editor externo después de que el documento se abrió en mi aplicación. Si intento guardar el archivo en mi aplicación, solicita duplicar el documento porque ha perdido el acceso al documento original. Esto no sucede al revés porque esas aplicaciones no han sido arenadas y, por lo tanto, tienen permisos que mi aplicación no. Tampoco parece que pueda evitar que la otra aplicación realice los cambios si no desea este comportamiento.

La documentación en desarrollador.apple.com no menciona nada de este tipo de situación. No estoy seguro de si este es un comportamiento previsto. Si es así, entonces puedo decirle a mi usuario que los permisos de documento se han perdido y que deben guardar una nueva versión o volver a abrir el archivo. Si no es un comportamiento previsto, ¿qué método en la API NSDocument otorgaría permiso al archivo una vez que se haya perdido? Supongo que la respuesta es la primera, que esto está destinado, pero ¿alguien puede confirmar y hay documentación?

¿Fue útil?

Solución

Sin realizar ninguna acción, la consola informa dos errores específicos: negar el archivo-emisión-extensión y negar los datos de archivos-escritura. La aplicación parece estar perdiendo privilegios para editar el documento, ya que fue cambiado por un editor externo después de que el documento se abrió en mi aplicación. Si intento guardar el archivo en mi aplicación, solicita duplicar el documento porque ha perdido el acceso al documento original

El comportamiento correcto en una situación como esta es no sobrescribir el archivo, sino para solicitar al usuario si desea recargar el documento, si es así, recargarlo y luego escribirlo.

El sistema operativo está haciendo lo correcto al no permitir una escritura ciega sobre un archivo que ha cambiado.

Ver NSFILEPRESENTER - (Void) PresentedItemDidChange para ver si cambió. Vuelva a leer el archivo y luego vea si puede guardarlo. No dice que se le haya negado una lectura en el archivo.

Además, dado que no ha publicado ningún código, puede ser útil mostrar qué código está utilizando para acceder al archivo y guardarlo. NSDocument ha incorporado el manejo para algunos tipos de cambios de archivos en el sandbox.

Otros consejos

Llamemos a su aplicación Scottedit y su competidor como Stackedit

Podría haber varias cosas sucediendo. NSDocument tiene un método LockDocument. StackEdit puede haber bloqueado el documento y no lo desbloqueó después de guardar. Si renuncia a la aplicación, el archivo debe desbloquearse y disponible para su aplicación. Si este es el caso, deberá crear una notificación para cuándo cambian los atributos del archivo usando Kqueue u otro.

Si la otra aplicación está "bloqueando" el acceso a su aplicación. Puede enviar un correo electrónico a ese desarrollador y pedirle que actualice su aplicación para que desbloquee el documento después de guardar. Este último paso es adicional a establecer notificaciones porque otro desarrollador puede aparecer y hacer lo mismo (rompiendo su aplicación).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top