NSObject类别类方法无法识别

时间:2012-09-27 14:22:05

标签: iphone objective-c crash

我在NSObject上创建了一个类别,因为我希望我的所有类都继承我写的两个类方法:

@interface NSObject (MyCategory)

+ (MyEnum) getXYZ;
+ (void) setXYZ:(MyEnum)myEnum;

@end

然后我将此类别导入我的PCH文件:

#ifdef __OBJC__
    #import <Foundation/Foundation.h>
    #import <UIKit/UIKit.h>
    #import "NSObject+MyCategory.h"
#endif

然后我在我的一个课程中使用了这个方法:

[[self class]getXYZ];

并在运行时出现此错误:

+[MyClass getXYZ]: unrecognized selector sent to class 0xd04f4
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason: '+[MyClass getXYZ]: unrecognized selector sent to class 0xd04f4'

我做错了什么吗? 该类别写得好吗? 类方法不是继承的吗? 我应该使用[超级]而不是[自我级]吗? PCH文件是导入我的类别的地方吗?

谢谢, 诺尔

3 个答案:

答案 0 :(得分:0)

我想你没有在类别(NSOBject)的实现文件(.m)中定义getXYZ方法。并且用于调用NSObject的类方法...使用

[NSObject getXYZ];

 [[self class]getXYZ];

答案 1 :(得分:0)

如果您的类别位于您的主项目的其他项目中,则必须添加链接器标记“-all_load”

答案 2 :(得分:0)

您不应在前缀标题(.pch)文件中导入类别。在大多数情况下,您只需要在其他几个文件中使用您的类别,因此只能在那里导入它们。仅导入整个项目中使用的前缀标题中的文件。

如果您确定要在前缀标题中包含该类别,请尝试将构建设置Precompile Prefix Header设置为No。或者清理项目。有时Xcode会忘记重新编译前缀标题。

enter image description here