将应用程序从IOS4升级到IOS5

时间:2011-12-05 18:50:36

标签: objective-c ios4 ios5

我有一个使用以下功能的IOS5应用程序

[self.presentingViewController dismissModalViewControllerAnimated:YES]; 

谁在IOS4上工作得很好,但我突然发现IOS5上不存在这个功能,所以我不得不使用其他等效功能

[self.parentViewController dismissModalViewControllerAnimated:YES]

现在我遇到了以下问题:由于IOS4中存在此功能,IOS4用户无法安装我的应用程序,更糟糕的是,该应用程序可在Apple的App Store上使用,但仅适用于IOS5用户。另一个相关的问题是,应用程序突然停止在配备Wifi的iPad上工作,那些连接到3G网络的应用程序运行正常。

有什么我错过了尝试编译这个新的应用程序版本吗?

提前致谢!

4 个答案:

答案 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)

要走的路是双重的:

  1. 针对最新的SDK版本编译您的应用,但也将部署目标设置为您要支持的最旧版本;这将确保应用程序在App Store中正确列出;

  2. 在使用仅在更高版本上可用的任何方法/功能之前进行检查;这将确保您的应用程序不会崩溃,并且可以通过条件编译来完成,例如:

  3. ķ

    #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

我希望这对你有益,就像对我一样。它使你的代码更干净!