我正在编写一个可重用的类,但我已经包含了对一个类的调用,这些类在编译时可能并不总是可用.
更具体地说,我正在使用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方法,所以编译器会抱怨?有没有人能想到的任何解决方案?
你必须在整个过程中使用反射.将您的代码更改为:
Class flurryClass = NSClassFromString(@"Flurry");
if(flurryClass){
[flurryClass performSelector:@selector(logEvent:) withObject:@"Blah"];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1242 次 |
| 最近记录: |