iOS静态库,无法访问某些类方法

时间:2015-01-21 05:53:46

标签: ios objective-c static-libraries unrecognized-selector

我在iOS中构建静态库。在我的项目中导入该库之后,我在其他链接器标志中添加了-ObjC。但是当我调用类方法(当前有3个可用)时,其中2个被调用并正确执行,但最后一个是出现此错误:"+[RankConferenceLib joinConferenceWithName:]: unrecognized selector sent to class 0x5044dc"

这是我的库头文件

@interface RankConferenceLib : NSObject


+(void)initEnvironment;
+(void)orientationChange;
+(void)joinConferenceWithName:(NSString *)name;
@end

在库的.m文件中

+ (void)joinConferenceWithName:(NSString *)name
{
       //....codes
}

在我的项目中,我打电话给他们

- (IBAction)join:(UIButton *)sender {
    [RankConferenceLib joinConferenceWithName:@"User"];
}

请告诉我我在这里失踪了什么。这是我的第一个静态库。我已经搜索过,但找不到任何与我的情况类似的帮助。请提及您还需要了解的其他内容。

谢谢。

3 个答案:

答案 0 :(得分:0)

尝试使用-all_load链接器标志

运行

Apple Documentation

Stack Overflow Answer

答案 1 :(得分:0)

我已经检查了这个并且对我来说它没有添加任何链接器标记就可以正常工作。

+ (void)joinConferenceWithName:(NSString *)name

中发生的事情只有一种错误

joinConferenceWithName内写一个日志以打印出参数name,并确保这是在调用,并且该方法内部出现了问题。

+ (void)joinConferenceWithName:(NSString *)name
{
    NSLog(@"the name is: %@", name);
}

最后,请确保您已将最新修改的静态库添加到项目中。

您可以从here

下载工作样本

答案 2 :(得分:-1)

@interface RankConferenceLib : NSObject
  -(void)initEnvironment;
  -(void)orientationChange;
  -(void)joinConferenceWithName:(NSString *)name;

  +(RankConferenceL *)SharedObject;
@end
在.m文件中

...

static RankConferenceL *RankObject;
+(RankConferenceL *)SharedObject
   {
      if(RankObject == nil)
        RankObject =[[RankConferenceL alloc] init];
      return RankObject;
   }

- (void)joinConferenceWithName:(NSString *)name
   {
   //....codes
   }

您可以通过创建对象在任何其他类中全局访问其方法和变量,或者只需使用

导入文件
 - (IBAction)join:(UIButton *)sender {
[[RankObject SharedObject] joinConferenceWithName:@"User"];
}