69 votes

Catégorie Objective-C Causer un sélecteur non reconnu

Mon projet a une UIImage catégorie de la fonction que je veux l'appeler à partir d'une autre classe. J'ai bien importer le fichier d'en-tête de la catégorie image et j'ai le projet de compiler avec aucun avertissement.

Le problème est que lorsque j'appelle la uiimage catégorie de fonction, j'en ai vu une inconnue sélecteur d'erreur avec un NSInvalidArgumentException. Pourquoi suis-je voir si j'ai correctement lié à tout?

#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

fichier qui l'appelle:

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

exception levée:

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

220voto

Dave DeLong Points 156978

Quelques possibilités:

  1. Vous n'avez pas lié UIImage+TTShare.m à votre cible. Ainsi, tant que vous avez l’en-tête, vous ne compilez pas l’implémentation.
  2. S'il s'agit d'une bibliothèque statique, vous devez ajouter -all_load au paramètre de construction Other Linker Flags .

6voto

Clive Paterson Points 550

J'ai eu le même problème et j'ai dû appliquer ce correctif aussi. Mon fichier source NSDate-Extensions.m n'étant pas compilé, je devais accéder aux Paramètres du projet, sélectionner la cible appropriée, cliquer sur l'onglet "Créer des phases", développer les éléments "Compiler les sources", puis cliquer sur le symbole +. et ajoutez manuellement mon fichier NSDate-Extensions.m.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X