vibracion tono sonido poner para notificacion mensaje llamada descargar como iphone cocoa-touch xcode exception

tono - vibracion iphone 6



El método de llamada en la categoría incluida desde la biblioteca estática del iPhone causa NSInvalidArgumentException (9)

Creé una biblioteca estática para albergar algunos de mis códigos como categorías.

Tengo una categoría para UIViews en "UIView-Extensions.h" llamadas Extensiones.

En esta categoría tengo un método llamado:

- (void)fadeOutWithDelay:(CGFloat)delay duration:(CGFloat)duration;

Llamar a este método funciona bien en el simulador en la configuración de depuración.

Sin embargo, si intento ejecutar la aplicación en el dispositivo, recibo una NSInvalidArgumentException:

[UIView fadeOutWithDelay:duration:]: unrecognized selector sent to instance 0x1912b0 *** Terminating app due to uncaught exception ''NSInvalidArgumentException'', reason: ''*** -[UIView fadeOutWithDelay:duration:]: unrecognized selector sent to instance 0x1912b0

Parece que, por algún motivo, UIView-Extensions.h no se incluye en las compilaciones de dispositivos.

Lo que he verificado / intentado

Intenté incluir otra categoría para NSString y tuve el mismo problema.

Otros archivos, como clases y funciones completas funcionan bien. Es un problema que solo ocurre con las categorías.

Hice todos los objetivos limpios, lo que no solucionó el problema.

Revisé el proyecto de la biblioteca estática, las categorías se incluyen en los grupos "copiar encabezados" y "compilar fuentes" del objetivo.

La biblioteca estática se incluye en el grupo principal de proyectos "enlace binario con biblioteca".

Otro proyecto al que he agregado la biblioteca estática funciona muy bien.

Eliminé y volví a agregar la biblioteca estática sin suerte

-ObjC bandera de vinculador se establece

¿Algunas ideas?

salida nm

libFJSCodeDebug.a(UIView-Extensions.o): 000004d4 t -[UIView(Extensions) changeColor:withDelay:duration:] 00000000 t -[UIView(Extensions) fadeInWithDelay:duration:] 000000dc t -[UIView(Extensions) fadeOutWithDelay:duration:] 00000abc t -[UIView(Extensions) firstResponder] 000006b0 t -[UIView(Extensions) hasSubviewOfClass:] 00000870 t -[UIView(Extensions) hasSubviewOfClass:thatContainsPoint:] 000005cc t -[UIView(Extensions) rotate:] 000002d8 t -[UIView(Extensions) shrinkToSize:withDelay:duration:] 000001b8 t -[UIView(Extensions) translateToFrame:delay:duration:] U _CGAffineTransformRotate 000004a8 t _CGPointMake U _CGRectContainsPoint U _NSLog U _OBJC_CLASS_$_UIColor U _OBJC_CLASS_$_UIView U ___CFConstantStringClassReference U ___addsf3vfp U ___divdf3vfp U ___divsf3vfp U ___extendsfdf2vfp U ___muldf3vfp U ___truncdfsf2vfp U _objc_enumerationMutation U _objc_msgSend U _objc_msgSend_stret U dyld_stub_binding_helper


Acabo de hablar con un ingeniero de Apple sobre esto, y esto se ha abordado en ld con versiones> 100. Esto está incluido en XCode4. Me guió a través de esto y lo intenté yo mismo y, de hecho, el problema de categoría es fijo.

Extraiga "-all_load" y regrese a "-ObjC" en la configuración de compilación con el nuevo enlazador.


Acabo de tener el mismo problema pero no funcionó agregar cualquier combinación de los indicadores descritos (-ObjC, -all_load, -force_load).

Resultó que no había marcado la casilla "Agregar a destino" al agregar los archivos al proyecto. Quité los archivos del proyecto y los agregué nuevamente, esta vez asegurándome de que esa casilla esté marcada. Esto solucionó el problema.


Desafortunadamente, debido a qué categorías funcionan y a la naturaleza dinámica del tiempo de ejecución de Objective-C, no todo funciona bien con las bibliotecas estáticas. El motivo por el que recibe este error es que la implementación de la categoría en la biblioteca estática nunca está realmente vinculada a la imagen ejecutable porque el compilador no tiene forma de saber que el código de implementación será necesario en tiempo de ejecución.

Para solucionar esto, puede obligar al vinculador a copiar archivos de objeto de un archivo estático para cualquier y todas las imágenes de clase y categoría de Objective-C. La desventaja es que el ejecutable incluirá un código de imagen para las clases que posiblemente no esté utilizando. Para que el enlazador incluya el código de categoría, agregue -ObjC a la OTHER_LD_FLAGS compilación OTHER_LD_FLAGS en Xcode. La implementación de su categoría ahora se copiará del archivo estático a su ejecutable y no obtendrá la excepción de tiempo de ejecución.


El problema de que -all_load o -force_load linker flags fueron necesarios para vincular categorías se ha corregido en LLVM . El arreglo se envía como parte de LLVM 2.9. La primera versión de Xcode que contiene el arreglo es el envío de Xcode 4.2 con LLVM 3.0. Las correcciones mencionadas ya no son necesarias cuando se trabaja con Xcode 4.2. El indicador -ObjC sigue siendo necesario al vincular binarios ObjC


En el pasado, pude forzar el enlace de la categoría con -u .objc_category_name_UIView_Extensions, pero con el entorno de desarrollo 3.0 que está roto y la única opción parece ser -all_load.


La única solución que funcionó fue incluir:

"-all_load"

en otras banderas enlazadoras

EDITAR: asegúrese de agregar este marcador al proyecto, incluida la biblioteca estática, no a la biblioteca estática en sí.

Sé que este no es el método correcto, pero está funcionando por ahora.

Puede ser un problema de OS 3.0 ya que este fue el trabajo para Three20 también.


Me encontré con este problema recientemente. No pude hacer funcionar la opción -all_load, cuando noté que otra categoría tenía el trabajo de DID. Era flojo para esta categoría y lo incluí en otro archivo.

Finalmente creé una clase ficticia (sin métodos, variables de instancia) e incluí la implementación de mis categorías en el archivo .m para esa clase ficticia. Después de hacer esto, mis categorías comenzaron a funcionar incluso después de eliminar el indicador -all_load.

Esto fue en iPhone OS 3.1.3.

Esta ciertamente no es la forma correcta de solucionarlo, pero parecía funcionar.

El código de muestra completo está en mi blog para mis categorías (triviales).


Si está en Xcode 3.2, puede evitar el uso de -all_load y, en su lugar, usar -force_load solo para la biblioteca en cuestión, que debería ser un poco más eficiente.

Esto se describe en un control de calidad técnico de Apple recientemente actualizado: http://developer.apple.com/mac/library/qa/qa2006/qa1490.html


Tuve el mismo problema con Categorías en mi biblioteca estática. En mi caso, "-all_load" no ayudó, ya que causó una gran cantidad de errores de compilación (mi biblioteca estática es un envoltorio alrededor de otra lib privada de C / C ++).

Lo resolví mediante un truco sugerido en blog que simplemente implicaba agregar una definición de clase ficticia (vacía) a los archivos de categoría. Usando este truco, guardé "-ObjC" pero dejé caer "-all_load" en la configuración del enlazador de la aplicación y funcionó bien en el dispositivo.