Pregunta

Tengo varias vistas web que cambio dentro y fuera de mi jerarquía de vistas. Algunas de estas vistas web contienen campos de formulario, por lo que implemento el editingDelegate para proporcionar el nsundomanerer para mi documento.

El problema es que cualquier tipificación realizada en WebView genera acciones que se colocan en la pila de deshacer. Después de retirar la vista de la jerarquía, las acciones aún están en la pila de deshacer. En ese momento, si un usuario usa CMD -Z para "deshacer la escritura", se lanza una excepción porque -undoediting: se envía a una instancia de concesionamiento de WebEditorDoToToTarget. (Una clase privada utilizada en la implementación de WebKit).

No puedo usar -removeallactionswithTarget: porque no puedo hacer referencia al objetivo. Parece que la única solución es deshabilitar deshabilitar el registro para la vista web.

¿Me estoy perdiendo algo o es una limitación de una WebView?

¿Fue útil?

Solución

Una solución de API privada es invocar -[WebView _ClearUndeoperations]. Todavía no he encontrado una solución de API pública.

Otros consejos

En mi opinión, el WebView debe asumir la responsabilidad de eliminarse a sí mismo o a cualquier objeto subordinoso del indemandader de WebView: en este caso, el suyo.

A juzgar por su descripción, no está haciendo esto. Sospecho que su objetivo de encontrar el objetivo para que pueda eliminarlo explícitamente será infructuoso, por lo que me gustaría sugerir otra solución, que he usado antes, o llegué lo suficientemente lejos por este camino para pensar en usar; )

La idea que tuve para este tipo de situación es utilizar una subclase personalizada de Nsundomanager que sea capaz de mantener su propia memoria redundante de todos los registros (al anular RegistroDowithTarget: ... y prepararse con Target). Con una variedad confiable de todos los registros, puede imponer su propia política para la casa de limpieza en cualquier momento. Es decir, podría decir "si la clase del objetivo es de un marco que no tengo, solo elimínelo" ... o sea más específico y decir que desea eliminar cualquier cosa que coincida con la clase WebEditorDoToToTarget, por ejemplo.

La última vez que revisé el NSUndoManager tenía un método - (void)removeAllActions. No es necesario especificar objetivos de acción.

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