0

在我的代码中我使用

[[self presentingViewController] dismissViewControllerAnimated:YES
                                                    completion:dismissBlock];

问题是我的部署目标设置为:5.0。

虽然基础 SDK 是 6.1。

我不应该收到 XCode 的警告吗?(因为我认为上面的方法是在 iOS6 中引入的)。

4

3 回答 3

3

不幸的是,Xcode 不会检查您是否使用了部署 SDK 中不可用的符号。
它仅根据基本 SDK 检查您的代码。

但是您可以为此使用一些第三方软件,例如DeployMate

话虽如此,正如其他人指出的那样,dismissViewControllerAnimated:completion:自 iOS 5 起就可以使用,因此您的代码是安全的。

但使用 DeployMate 之类的工具检查应用程序中不可用或已弃用的 API 始终是一个好主意。

编辑

这是对您的评论的回答:

如果您的部署目标是 5.0 并且您的基础 SDK 为 6.0,则在 iOS 5 设备上使用 6.0 SDK 中可用的符号将使应用程序崩溃。
但是 Xcode 在编译时不会对此发出警告,因此需要一些第三方软件。

一旦您确定了有问题的符号,使用respondsToSelector:就是要走的路,因为它比简单的版本检查要好。

这样,您可以拥有将与两个 SDK 版本一起运行的条件代码:

if( [ someObject respondsToSelector: @selector( someIOS6Method ) ] )
{ /* iOS 6 code */ }
else
{ /* iOS 5 code */ }

仅当您检测到 SDK 问题时才执行此操作。不要对所有事情都这样做。

于 2013-08-15T12:31:37.723 回答
1

根据 UIVIewController class reference,此方法适用于 iOS 5.0 及更高版本。

Availability
Available in iOS 5.0 and later.
于 2013-08-15T12:30:58.157 回答
0

警告你是不行的。SDK 的默认捆绑包中不包含此警告。

于 2013-08-15T12:31:59.353 回答