代码之家  ›  专栏  ›  技术社区  ›  Seva Alekseyev

iPhone上的优雅降级

  •  1
  • Seva Alekseyev  · 技术社区  · 14 年前

    我如何为运行在OS 2上的iPhone(目标C++)编写一个程序,但如果有可用的3个特性呢?

    示例:复制和粘贴(uipasteboard类)。很好的特性,但我不想破坏向后兼容性。我是根据sdk v.3还是v.2编译的?如果是后者,我如何创建一个uipasteboard实例,考虑到它没有在报头中声明?如果是前者,那么在OS 2.0下加载时,某些C链接函数不会导致“未解析引用”吗?

    2 回复  |  直到 14 年前
        1
  •  1
  •   Ole Begemann    14 年前

    编辑目标的生成设置,如下所示:

    • 将基本SDK设置为要使用其API的版本(例如3.0或3.1)。
    • 将部署目标设置为要支持的最低操作系统版本(例如2.2.1)。

    在构建时,可以根据基本的SDK进行编译。对于在基本SDK中定义但在部署目标中不可用的所有符号,需要向代码中添加运行时检查以检查其可用性。示例:

    1. 检查uipasteboard是否可用:

      Class PasteboardClass = NSClassFromString(@"UIPasteboard");
      if (PasteboardClass != nil) {
          // UIPasteboard is available
      }
      
    2. 检查特定方法是否可用:

      if ([UITableViewCell respondsToSelector:@selector(initWithStyle:reuseIdentifier:)]) {
          // ...
      }
      
        2
  •  0
  •   Ralf Edmund    14 年前

    我没有尝试过,但我建议根据最新的(3.x)SDK版本进行构建。所以你可以得到任何类和方法定义 可以 在目标设备上可用。

    在应用程序中,您必须检查运行应用程序的操作系统版本。基于目标操作系统,您必须决定应该使用哪个类和方法。毕竟,这是一大堆条件代码,可能还有很多附加代码来提供缺失的功能(即直接访问sqlite而不是使用核心数据)。根据我的经验,这不会导致问题,因为大多数类型信息在运行时都会被清除。