Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 目标-C类别导致无法识别的选择器_Iphone_Objective C_Cocoa_Categories - Fatal编程技术网

Iphone 目标-C类别导致无法识别的选择器

Iphone 目标-C类别导致无法识别的选择器,iphone,objective-c,cocoa,categories,Iphone,Objective C,Cocoa,Categories,我的项目有一个UIImagecategory函数,我想从另一个类调用它。我正确地导入了图像类别的头文件,并在没有警告的情况下编译了项目 问题是,当我调用UIImagecategory函数时,我看到一个无法识别的选择器错误,带有NSInvalidArgumentException。如果我把所有的东西都连接好了,为什么我会看到这个 #import <UIKit/UIKit.h> @interface UIImage (DRShare) + (UIImage*) imageNamed:

我的项目有一个
UIImage
category函数,我想从另一个类调用它。我正确地导入了图像类别的头文件,并在没有警告的情况下编译了项目

问题是,当我调用
UIImage
category函数时,我看到一个无法识别的选择器错误,带有
NSInvalidArgumentException
。如果我把所有的东西都连接好了,为什么我会看到这个

#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
提出的例外情况:

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

有两种可能性:

  • 您没有将
    UIImage+TTShare.m
    链接到目标。因此,当您拥有头时,您并不是在编译实现
  • 如果这是静态库的一部分,则需要将应用程序链接库的
    -all_load
    添加到其他链接器标志生成设置中

  • 我也遇到了同样的问题,也必须应用此修复程序。
    我的NSDate Extensions.m源文件未编译,因此我必须进入项目设置,然后选择适当的目标,然后单击“构建阶段”选项卡,然后展开“编译源”项,然后单击+符号并手动添加我的NSDate Extensions.m文件。

    我收到了此错误消息,我正在使用Cocoapods。要修复此错误,我只需再次调用
    pod install
    即可正确创建所有必要的链接。

    如果要使用Category方法,则必须将-ObjC添加到应用程序的其他链接器标志构建设置中。

    另一种可能性

    您有category的实现,但没有接口。
    我的意思是你忘了在*.h中声明类别的界面。

    还有一种可能性:

    这几乎太尴尬了,无法承认,但以防万一有人可能犯了同样愚蠢的错误:


    我将代码从一个项目复制到另一个项目,错误地将相同的源代码粘贴到了
    .h
    文件和
    .m
    文件中(在这两个文件中,我都将代码放在了
    .h
    文件中)。我修复了我的
    .m
    文件,它工作正常。

    可能是因为您在界面中编写了
    imageNamed
    而不是
    imagenamedrr

    请提供代码和异常详细信息。如果没有这一点,答案是不可能的。
    imageNamedTT:
    的声明也会很有用。是否您的实例实际上是一个不同的类?ps。这是一个奇怪的问题,很长一段时间以来,我一直让它工作得很好,但有些事情却出了问题。可能是我太蠢了,但是你声明了
    imageNamed:,然后是
    imagenamedrr:`的实现,但是这个方法没有在标题中声明。(显然是旧的,您现在可能已经解决了这个问题)。这只是一个输入错误还是一个实际问题?我想我把静态库的目标搞糟了。谢谢你指出静态库的问题。有更多的信息。为了清楚起见,您必须将该标志添加到包含静态库的应用程序的链接器标志中,而不是在构建静态库本身时。正如Xcode中所指出的,这也可能是罪魁祸首。我无意中使用类模板创建了文件,删除了这些文件,并使用类别模板重新创建了同名文件。重命名实现(并返回)后,它工作了。您的意思是在客户端应用程序的生成设置中,而不是在生成静态库时,加载所有内容?这就是对我有效的方法。在使用
    -all\u load
    之前,请确保尝试是否仅添加
    -ObjC
    即可解决问题。所有加载都会不必要地增加可执行文件的大小。哇。当然在我的情况下,我在主应用程序的子项目中有一个类别,它只在子项目中使用,但在主应用程序中添加-ObjC可以修复它。非常感谢。
    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