当我无法对它进行弱连接时,如何测试一个类的存在

Sim*_*onB 4 objective-c ios

我正在编写一个可重用的类,但我已经包含了对一个类的调用,这些类在编译时可能并不总是可用.

更具体地说,我正在使用Flurry分析,我希望包含对它的调用 - 但并非每个可以包含该模块的项目都可以访问Flurry库 - 我只是希望它不能在这些代码中编译的情况.该模块将作为源代码分发,因此只需在编译时进行测试.

到目前为止,我尝试过:

if([Flurry class]){
    [Flurry logEvent:@"Blah"];
}
Run Code Online (Sandbox Code Playgroud)

这失败了"使用未定义的标识符" - Flurry没有在任何地方定义,因为没有对库的弱引用

接下来尝试了:

Class flurryClass = NSClassFromString(@"Flurry");
if(flurryClass){
  [flurryClass logEvent:@"Blah"];
}
Run Code Online (Sandbox Code Playgroud)

这失败了"没有选择器logEvent的已知类方法"

所以我似乎陷入困境,因为第一种方法依赖弱链接一个可能无法用于弱链接的库!我假设第二种方法失败,因为我在一个当前没有定义的类上调用Class方法,所以编译器会抱怨?有没有人能想到的任何解决方案?

Chr*_*s C 9

你必须在整个过程中使用反射.将您的代码更改为:

Class flurryClass = NSClassFromString(@"Flurry");
if(flurryClass){
  [flurryClass performSelector:@selector(logEvent:) withObject:@"Blah"];
}
Run Code Online (Sandbox Code Playgroud)