【问题标题】:conditionally import framework有条件导入框架
【发布时间】:2011-03-08 21:07:07
【问题描述】:

首先我确定这是一个简单的问题。

我正在使用 iAd 框架开发一个 iPhone 应用程序,该应用程序仅适用于 iOS 4.0 或更高版本。

不过,我想选择一个 iPhone OS 3.0 部署目标,这会导致一切崩溃。

  • 如何有条件地包含 iAd 框架? ...我的意思是,它会是这样的: ...if([[UIDevice currentDevice] systemVersion]>=4.0]) #import

显然这行不通,因为我不知道正确的语法。另外:

  • 如何有条件地声明 AdView* 变量?
  • 如何在我的实现文件中有条件地处理这个 AdView* 变量。

如果你们能帮助我,我会留下深刻的印象。

谢谢

【问题讨论】:

标签: iphone import frameworks version if-statement


【解决方案1】:

您不需要更改您的包含,您需要使 iAd(或任何其他新框架)弱链接:

在您的目标中,在链接框架中找到 iAd,并将其“角色”从“必需”更改为“弱”。

要有条件地处理变量,请使用NSClassFromString 函数,如下所示:

Class AdClass = NSClassFromString(@"ADBannerView");
if(AdClass) {//if the class exists
    ADBannerView* myAd = [[AdClass alloc] initWithFrame:CGRectZero];
    // do something with the ad
}

如果操作系统早于 iOS 4.0,AdClass 将是 nil 并且代码不会执行。请注意,使用ADBannerView*作为变量的类型应该不会导致任何问题,因为它只是对编译器的提示,编译后与id相同。

【讨论】:

  • 我已经尝试过更改为弱,但它似乎不起作用 - 它一直说没有这样的文件或目录。有什么问题? (我一路从 Target,Get info 开始,并将类型设置为 weak 而不是必需的)。此外,我需要以多种方法处理我的 AdBannerView(主要是把它放在前面)。我应该在哪里声明您发送的sn-p?实施时? ViewDidLoad 显然不起作用,那么在哪里呢? (对不起我的基本技能在这里)。谢谢
  • 您应该像往常一样导入 iAd (#import <iAd/iAd.h>)。你可以在任何你想使用ADBannerView(包括viewDidLoad,如果你想)的地方使用上面的代码。第一行之后AdClassADBannerView类完全相同,不支持则为nil,其余与正常使用类相同。
猜你喜欢
  • 1970-01-01
  • 2011-11-12
  • 2015-04-29
  • 2021-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-11
  • 2012-09-10
相关资源
最近更新 更多