tutorial programar programación para objective mac lenguaje español desde descargar apple objective-c xcode ios8 xcode6

objective-c - programar - tutorial xcode 9 español



Xcode lanza una excepción en Main() en iOS 8 con punto de interrupción ''todas las excepciones'' (5)

Como se indica en los comentarios, debe desactivar la captura de las excepciones de C ++ editando su punto de interrupción Todas las excepciones .

Para hacer eso, haga clic derecho en su punto de interrupción y cambie Exception de All a Objective-C :

Las excepciones en el código C ++ son parte de la funcionalidad normal de la aplicación. Sin embargo, el punto de interrupción de excepción no se detecta sin control, sino todas las excepciones planteadas, incluso cuando se manejan correctamente más adelante, de ahí la detención en la ejecución.

Estoy usando Xcode 6 (GM, no descargué betas), y estoy desarrollando aplicaciones para iOS 7+. Para todos mis proyectos, acabo de abrir los mismos proyectos en los que solía trabajar en Xcode 5.

En el navegador Breakpoint, tengo activado el punto de interrupción All Exceptions . Se establece en Break: On Throw . Ahora, cada vez que ejecuto mi aplicación (ya sea en un dispositivo o en un simulador), detiene la ejecución en la línea return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); en la función main() .

Si presiono Reproducir para continuar la ejecución del programa dos veces, el programa funciona bien. Esto no me impide trabajar, pero es molesto tener que reproducir manualmente la ejecución cada vez y restablecer mis editores.

Me gustan los comportamientos que he configurado en Xcode (llevar el editor actual a donde se detuvo la ejecución), y tener ese punto de interrupción de All Exceptions es importante en mi opinión. (Así que no quiero cambiar eso)

Al ejecutar el mismo código, con los mismos entornos, para un objetivo iOS 7 (de nuevo, dispositivo o simulador), no se produce la excepción.

¿Alguna pista de lo que podría causar este extraño comportamiento?


Solo resumí las respuestas anteriores que me ayudaron a solucionarlo.

Problema: cuando agrega una fuente personalizada y luego aparentemente la elimina (reemplaza), en algún lugar del proyecto sigue siendo su referencia y el punto de interrupción se detiene varias veces en el punto de interrupción principal de C ++ lib se detiene en iOS 8.

Soluciones

1) Busque en el proyecto y elimine (reemplace) todas las referencias a esas fuentes. Podría en algunas puntas, submódulos, etc.

2) Si no puede solucionarlo en todas partes (ex libs de solo lectura, úselos) o el problema persiste después de la solución 1, agregue esas fuentes antiguas al proyecto

3) Ignórelo: es C ++ lib, así que cambie la excepción del punto de interrupción de "Todos" a "Objective-C" solamente


Tuve el mismo problema, el problema fue que agregué algunos archivos de interfaz de otro proyecto que tiene una fuente diferente. Solo encuéntralos y quítalos.


Xcode 9, a veces hay excepciones que se lanzan pero iOS lo está capturando con gracia. Esto ayudará

source

para mi caso, era un atributo definido por el usuario en plumín


TLDR; En mi caso, la causa del problema era la falta de fuentes.

Yo también tuve este problema. Si bien @Johnnywho tiene razón al dejar el Excepción Breakpoint solo para Objective-C, detiene el comportamiento no deseado, aún no explica cuál es la verdadera causa, por qué se ejecuta sin excepción en iOS7 y por qué sucede esto solo en algunos proyectos.

Es por eso que continué y diseccioné uno de mis proyectos en el que tuve este problema, hasta el punto en que pude encontrar la causa. Supongo que podría haber más de una causa para este comportamiento, pero en mi caso faltaban fuentes personalizadas.

Forma rápida de probarlo:

  1. Comience un nuevo proyecto de vista única

  2. Habilite el punto de interrupción en todas las excepciones, incluido C ++ (Puntos de interrupción / + / Agregar punto de interrupción de excepción)

  3. Arrastre al proyecto alguna fuente personalizada (permita copiar y marque el objetivo para agregarla)

  4. Agregue una etiqueta a la vista en el controlador de vista principal

  5. Elija la fuente personalizada para su etiqueta (en Xcode 6+ debe mostrarse en el selector de fuente tan pronto como la arrastre al proyecto).

  6. Ejecute la aplicación y confirme que ve la etiqueta en su fuente personalizada (parece que ya no necesitamos agregar el nombre del archivo de fuente en Info.plist para la clave "Fuentes proporcionadas por la aplicación", si la fuente personalizada ha sido utilizado en un guión gráfico de xib de la aplicación).

  7. Ahora elimine la fuente personalizada de su proyecto (ya sea desmarcando la relación objetivo o eliminándola en la configuración objetivo / Fases de construcción / Copiar recursos de paquete)

  8. Elimine la aplicación de su dispositivo o sim (para eliminar el archivo de fuente del paquete de la aplicación)

  9. Producto / Limpio

  10. Ejecute la aplicación nuevamente (ahora la etiqueta todavía tiene la referencia a la fuente personalizada pero la aplicación no tiene el archivo). Deberías notar la misteriosa excepción si corres en iOS8.

  11. Ejecute la aplicación en el dispositivo con iOS7 o sim con iOS7 (para eso deberá cambiar el Objetivo de implementación de iOS a iOS7). Aunque la etiqueta no mostrará la fuente personalizada, no habrá una excepción.

  12. Agregue el archivo de fuente nuevamente al destino y el punto de interrupción ya no se detendrá en la ejecución.

Entonces, mi conclusión es que en iOS8 las fuentes faltantes causan una excepción de C ++, mientras que en iOS7 no lo hacen, de ahí el desencadenante del punto de interrupción.

Una excepción similar (y un desencadenante de punto de interrupción) también puede ser causada por un nombre de fuente incorrectamente escrito en el archivo Info.plist bajo la clave "Fuentes proporcionadas por la aplicación".