Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Objective-C Category Causing unrecognized selector

My project has a UIImage category function that I want to call from another class. I properly import the header file for the image category and I get the project to compile with no warning.

The problem is that when I call the UIImage category function I seen an unrecognized selector error with a NSInvalidArgumentException. Why am I seeing this if I've properly linked everything?

#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 

file that calls it:

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

exception raised:

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 
like image 594
devinross Avatar asked Oct 22 '10 15:10

devinross


2 Answers

A couple possibilities:

  1. You did not link UIImage+TTShare.m into your target. So while you have the header, you're not compiling the implementation.
  2. If this is part of a static library, you need to add -all_load to the Other Linker Flags build setting for the app linking against the library.
like image 174
Dave DeLong Avatar answered Sep 20 '22 05:09

Dave DeLong


If you want to use Category method, you must add -ObjC to the Other Linker Flags build setting of your APP.

like image 24
ling Avatar answered Sep 20 '22 05:09

ling