【问题标题】:Upgrading app from IOS4 to IOS5将应用程序从 IOS 4 升级到 IOS 5
【发布时间】:2011-12-05 18:50:36
【问题描述】:

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

[self.presentingViewController dismissModalViewControllerAnimated:YES]; 

谁在 IOS4 上完美运行,但突然我发现这个功能在 IOS5 上不存在,所以我不得不使用另一个等效的

[self.parentViewController dismissModalViewControllerAnimated:YES]

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

在编译这个新的应用版本时我有什么遗漏吗?

提前致谢!

【问题讨论】:

  • UIViewController 的 dismissModalViewControllerAnimated 从 iOS 2.0 开始就存在了。您确定这是您的应用程序中缺少或损坏的内容吗?您是否有编译错误或链接错误或其他显示问题的东西?
  • @MichaelDautermann:区别在于接收者

标签: objective-c ios4 ios5


【解决方案1】:

您可以像这样检查属性是否存在:

if([self respondsToSelector:@selector(presentingViewController)])
    [self.presentingViewController dismissModalViewControllerAnimated:YES];
else
    [self.parentViewController dismissModalViewControllerAnimated:YES];

【讨论】:

    【解决方案2】:

    这样编码:

    if ([self respondsToSelector:@selector(parentViewController)])
        [self.parentViewController ...];
    else
        [self.presentingViewController ...];
    

    (这是未编译、未经测试等)

    关键是您可以(并且应该)测试能力,然后采取相应的行动。在这种情况下,如果 iOS5 方法可用,请使用该方法。如果没有,请使用旧的,这也意味着它是 iOS5 之前的设备。

    【讨论】:

      【解决方案3】:

      要走的路有两条:

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

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

      k

      #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 以了解如何改进该示例。

      【讨论】:

        【解决方案4】:

        我在 iOS 4 上构建了一个添加 presentingViewController 的类别。 (它会在 iOS 5 上自行禁用。)

        无缝运行;只需包含 2 个文件。

        请参阅backward-modal。

        我希望这对你有好处,对我也有好处;它使您的代码更干净!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-31
          • 2013-02-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多