【问题标题】:How to deal with all the depraciations如何处理所有的贬低
【发布时间】:2012-11-28 15:12:48
【问题描述】:

这可能是一个小问题,但是面对 iOS6 中的所有折旧,您如何处理向后兼容性?我目前不确定如何自己处理它们。

例子:

UITextAlignment 已弃用,但使用 NSTextAlignment 将无法在使用 iOS 5 及更低版本的设备上运行

dismissModalViewControllerAnimated: 也被弃用,而支持dismissViewControllerAnimated: completion:

那么如何/应该如何保持与旧 iOS 版本的兼容性?有没有办法在 XCode 4.5 模拟器中测试旧版本?

感谢您的建议!

【问题讨论】:

    标签: iphone objective-c ios ios6


    【解决方案1】:

    要在代码中获取所有已弃用的方法,只需将应用程序的部署目标设置为 iOS 6.0,并编译您的代码,然后您将收到每个弃用方法的警告。

    为了解决弃用问题,请使用以下方法之一:

    1-

    float systemVersion = [[[UIDevice currentDevice]systemVersion]floatValue];
    
    
        if(systemVersion < 6.0)
        {
            calendarArray = [self.eventStore calendars];
        }
        else
        {
            calendarArray = [self.eventStore calendarsForEntityType:EKEntityTypeEvent];
        }
    

    2- USer respondToSelecter 方法来检测对象是否响应此类选择器。

    【讨论】:

    • 在检测到不推荐使用的方法并解决它们后,不要忘记将部署目标设置为原始值
    • 感谢您的提示,看起来很合理。不知何故,我希望避免那些条件检查。但我认为这可能是必要的
    • @patman 您可以使用预处理器#if 语句来避免应用程序必须处理该语句。这是一种更好的方法。
    • @RileyE 这是真的,但我认为在代码可读性方面几乎相同。至少对于我可以想象自己在以前的版本中定义新常量的常量。 #ifndef NSTextAlignment
    【解决方案2】:

    您可以下载较旧的模拟器版本。 Xcode(本地应用程序菜单)> Preferences > Downloads > 单击以安装所需的模拟器版本。可用版本:4.3、5.0、5.1

    【讨论】:

    • 4.3 在 Mountain Lion 中不可用,您需要一台装有旧版 Mac OS X 的 Mac。
    • 好的,很高兴知道这一点。到目前为止,刚刚看到了一些丑陋的解决方法!
    【解决方案3】:

    在方法的情况下,您可以使用respondToSelector: 方法来检测新方法是否可用,例如:

    if ([controller respondToSelector:@selector(dismissViewControllerAnimated:completion:)]) {
        [controller dismissViewControllerAnimated:YES completion:nil];
    } else {
        [controller dismissModalViewControllerAnimated:YES];
    }
    

    【讨论】:

      猜你喜欢
      • 2021-11-10
      • 2014-02-25
      • 1970-01-01
      • 1970-01-01
      • 2019-10-20
      • 2017-12-08
      • 2015-12-15
      • 2015-01-15
      • 1970-01-01
      相关资源
      最近更新 更多