iphone objective-c cocoa category

iphone - Categoría Objective-C Causando selector no reconocido



cocoa category (7)

Otra posibilidad más:

Esto es casi demasiado embarazoso como para admitirlo, pero solo en caso de que alguien haya cometido el mismo error tonto:

Copiaba código de un proyecto a otro y, por error, había pegado el mismo código fuente en el archivo .h y en el archivo .m (en ambos había escrito el código para el archivo .h ). .m mi archivo .m y funcionó.

Mi proyecto tiene una función de categoría UIImage que quiero llamar desde otra clase. Importe correctamente el archivo de encabezado para la categoría de imagen y obtengo el proyecto para compilar sin advertencia.

El problema es que cuando llamo a la función de categoría UIImage vi un error de selector no reconocido con una NSInvalidArgumentException . ¿Por qué estoy viendo esto si he vinculado todo correctamente?

#import <UIKit/UIKit.h> @interface UIImage (DRShare) + (UIImage*) imageNamed:(NSString*)name; @end @implementation UIImage (DRShare) + (UIImage*) imageNamedDR:(NSString*)name{ CGFloat s = 1.0f; if([[UIScreen mainScreen] respondsToSelector:@selector(scale)]){ s = [[UIScreen mainScreen] scale]; } NSString *path = [NSString stringWithFormat:@"%@%@%@.png",kImagesPath,name,s > 1 ? @"@2x":@""]; return [UIImage imageWithContentsOfFile:DRBUNDLE(path)]; } @end

archivo que lo llama:

backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamedDR:@"Share Popup Background"]];

excepción planteada:

2010-10-22 11:51:02.880 Stuff[11432:207] +[UIImage imageNamedDR:]: unrecognized selector sent to class 0x1f8e938 2010-10-22 11:51:02.883 Stuff[11432:207] *** Terminating app due to uncaught exception ''NSInvalidArgumentException'', reason: ''+[UIImage imageNamedDR:]: unrecognized selector sent to class 0x1f8e938'' *** Call stack at first throw: ( 0 CoreFoundation 0x02e65b99 __exceptionPreprocess + 185 1 libobjc.A.dylib 0x02fb540e objc_exception_throw + 47 2 CoreFoundation 0x02e6776b +[NSObject(NSObject) doesNotRecognizeSelector:] + 187 3 CoreFoundation 0x02dd72b6 ___forwarding___ + 966 4 CoreFoundation 0x02dd6e72 _CF_forwarding_prep_0 + 50 5 TapTapShare 0x0001291c -[DRShareViewController backgroundView] + 127 6 TapTapShare 0x00012343 -[DRShareViewController loadView] + 639 7 UIKit 0x0044f54f -[UIViewController view] + 56 8 UIKit 0x0044d9f4 -[UIViewController contentScrollView] + 42 9 UIKit 0x0045d7e2 -[UINavigationController _computeAndApplyScrollContentInsetDeltaForViewController:] + 48 10 UIKit 0x0045bea3 -[UINavigationController _layoutViewController:] + 43 11 UIKit 0x0045d12d -[UINavigationController _startTransition:fromViewController:toViewController:] + 524 12 UIKit 0x00457ccd -[UINavigationController _startDeferredTransitionIfNeeded] + 266 13 UIKit 0x00574b55 -[UILayoutContainerView layoutSubviews] + 226 14 QuartzCore 0x02616481 -[CALayer layoutSublayers] + 177 15 QuartzCore 0x026161b1 CALayerLayoutIfNeeded + 220 16 QuartzCore 0x026160bd -[CALayer layoutIfNeeded] + 111


Otra posibilidad.

Tienes la implementación de categoría pero no tienes una interfaz. Quiero decir que olvidó declarar en * .h la interfaz de su categoría.


Puede ser porque escribes imageNamed lugar de imageNamedDR en la interfaz ...


Si desea utilizar el método Categoría, debe agregar -ObjC a la configuración de compilación de Indicadores del otro enlazador de su APLICACIÓN.


Tuve el mismo problema y tuve que aplicar esta corrección también. Mi archivo fuente NSDate-Extensions.m no se estaba compilando, así que tuve que entrar en Configuración del proyecto, luego seleccionar el objetivo apropiado, luego hacer clic en la pestaña "Crear fases", luego expandir los ítems "Compilar fuentes", luego hacer clic en el símbolo + y agregue manualmente mi archivo NSDate-Extensions.m.


Tuve este mensaje de error y estoy usando Cocoapods. Para solucionar el error, solo necesitaba llamar a la pod install nuevamente para crear todos los enlaces necesarios correctamente.


Un par de posibilidades:

  1. No vinculó UIImage+TTShare.m a su objetivo. Entonces, mientras tiene el encabezado, no está compilando la implementación.
  2. Si esto es parte de una biblioteca estática, debe agregar -all_load a la configuración de compilación de Indicadores de otros enlaces para la aplicación que enlaza con la biblioteca.