我有一个使用以下功能的IOS5应用程序
[self.presentingViewController dismissModalViewControllerAnimated:YES];
谁在IOS4上工作得很好,但我突然发现IOS5上不存在这个功能,所以我不得不使用其他等效功能
[self.parentViewController dismissModalViewControllerAnimated:YES]
现在我遇到了以下问题:由于IOS4中存在此功能,IOS4用户无法安装我的应用程序,更糟糕的是,该应用程序可在Apple的App Store上使用,但仅适用于IOS5用户。另一个相关的问题是,应用程序突然停止在配备Wifi的iPad上工作,那些连接到3G网络的应用程序运行正常。
有什么我错过了尝试编译这个新的应用程序版本吗?
提前致谢!
答案 0 :(得分:4)
您可以检查是否存在这样的属性:
if([self respondsToSelector:@selector(presentingViewController)])
[self.presentingViewController dismissModalViewControllerAnimated:YES];
else
[self.parentViewController dismissModalViewControllerAnimated:YES];
答案 1 :(得分:1)
以这种方式编码:
if ([self respondsToSelector:@selector(parentViewController)])
[self.parentViewController ...];
else
[self.presentingViewController ...];
(这是未编译的,未经测试的等等)
关键是你可以(而且应该)测试功能,然后采取相应的行动。在这种情况下,如果iOS5方法可用,请使用该方法。如果没有,请使用旧的,这也意味着它是iOS5之前的设备。
答案 2 :(得分:0)
要走的路是双重的:
针对最新的SDK版本编译您的应用,但也将部署目标设置为您要支持的最旧版本;这将确保应用程序在App Store中正确列出;
在使用仅在更高版本上可用的任何方法/功能之前进行检查;这将确保您的应用程序不会崩溃,并且可以通过条件编译来完成,例如:
ķ
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 40000
if ([[UIApplication sharedApplication] respondsToSelector:@selector(beginBackgroundTaskWithExpirationHandler:)])
{
UIBackgroundTaskIdentifier bgTask = [[UIApplication sharedApplication] eginBackgroundTaskWithExpirationHandler:^{}];
// Perform work that should be allowed to continue in background
[[UIApplication sharedApplication] endBackgroundTask:bgTask];
}
#endif
如果你不得不在很多地方这样做,这是非常复杂的。您可以查看this very good post以了解如何改进该示例。
答案 3 :(得分:0)
我已经构建了一个在iOS 4上添加presentingViewController
的类别。
(它在iOS 5上禁用它。)
它无缝地工作;只需包含2个文件。
请参阅backward-modal。
我希望这对你有益,就像对我一样。它使你的代码更干净!