2011-06-02 10 views
5

Digamos que mi aplicación hace algo irrecuperable (esto nunca sucede, ¿no ?: P). ¿Debo usar exit()? ¿Debo usar NSAssert (false, @ "Foo")? ¿Debo arrojar algo de alguna manera? Respuesta difícil a google para.¿Cuál es la mejor manera de salir y manejar un error fatal en Objective-C?

+4

La solución estándar es ejecutar Pong o Rogue en otra ventana en el lado opuesto de la pantalla para distraerlos mientras reinicia silenciosamente la aplicación. Al menos, de seguro desearía que Xcode hiciera esto en lugar de presentar un "Hey, ¿te gustaría que me cuelgue ahora? ¿Cómo estás ahora?" diálogo. –

Respuesta

0

No creo que deba forzar el cierre de su aplicación si ocurre algo malo, ya que es molesto para el usuario; no tendrán ni idea de lo que salió mal. Además, es probable que Apple rechace tu aplicación si esto es lo suficientemente común.

En su lugar, debe abrir un cuadro de diálogo para decir qué fue mal (por ejemplo, escribir un error en la base de datos, intente de nuevo).

Si su aplicación puede terminar en un estado en que está totalmente rota, debe volver a diseñar su aplicación. ¿Podría dar un ejemplo de algo "irrecuperable"?

+0

Quizás esta sea una pregunta incorrecta, y es por eso que no encuentro una respuesta. Primero, esta no es una aplicación ios. Y estoy apareciendo un diálogo. El problema en el que estoy trabajando actualmente es un error desconocido en el sistema de archivos. Pero actualmente estoy preocupado de que el estado de la aplicación no sea funcional después de que esto ocurra, por lo que me gustaría salir. ¿Supongo que podría crear un método "rápido para dejar de fumar" que simplemente salga de la aplicación normalmente? Dado que esto no ocurriría (con suerte) con una versión de lanzamiento del proyecto, supongo que quería sacar la aplicación de su miseria. –

+0

Si no es una aplicación de iOS, entonces creo que la experiencia de usuario de tener una "Esta aplicación encontró un error y debe salir" es más aceptable. Aun así, solo debe usar esto como último recurso: intente manejar el error con elegancia. – pheelicks

+0

Reflexionando sobre esto, creo que realmente no estaba haciendo una buena pregunta. Gracias por tu ayuda. Eso es más o menos lo que estoy haciendo en este momento, pero la esperanza es que el usuario nunca verá este código. –

0

Si su aplicación hace algo realmente irrecuperable, es probable que se termine por el O.S. sin que tengas la posibilidad de saberlo. Piensa en acceder a un objeto desasignado.

Si está considerando errores o condiciones imprevistas que su programa podría detectar, entonces depende en gran medida de qué se trata. Pero una política general es:

  1. informando al usuario sobre el hecho de que ocurrió un error;

  2. tratando de recuperar tanto como sea posible;

  3. salen de la aplicación con gracia.

1 y 3 descartar explícitamente ambos NSAssert y exit() opciones que mencionas. Tirar tampoco ayuda, porque si lanzas una excepción y no la manejas, tu programa terminará abruptamente.

Salir correctamente significa salir como en un caso normal, cuando se invocan todos los métodos dealloc, se cierran todos los archivos, se liberan todos los recursos. Y posiblemente almacene suficiente información sobre el estado de ejecución del programa para que sea posible recuperarlo en el siguiente inicio.

Cuestiones relacionadas