Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如果部署目标<;基本sdk?_Iphone_Objective C_Ios_Compatibility - Fatal编程技术网

Iphone 如果部署目标<;基本sdk?

Iphone 如果部署目标<;基本sdk?,iphone,objective-c,ios,compatibility,Iphone,Objective C,Ios,Compatibility,我想知道,当部署目标低于基本SDK时,如何检查代码是否不调用不可用的方法 在SDK等于部署目标的设备上运行应用程序是可能的,但我选择了一种更“自动”的方式。有什么想法吗 问候,, 昆汀使用NSClassFromString() 这是你在找的吗?你在找类似的东西吗 -(BOOL)respondsToSelector:(SEL)aSelector如果您有一个类的实例,可以使用以下命令查看它是否理解您要调用的方法: if ([mipmapBrowserView respondsToSelector:@

我想知道,当部署目标低于基本SDK时,如何检查代码是否不调用不可用的方法

在SDK等于部署目标的设备上运行应用程序是可能的,但我选择了一种更“自动”的方式。有什么想法吗

问候,,
昆汀

使用
NSClassFromString()


这是你在找的吗?

你在找类似的东西吗
-(BOOL)respondsToSelector:(SEL)aSelector

如果您有一个类的实例,可以使用以下命令查看它是否理解您要调用的方法:

if ([mipmapBrowserView respondsToSelector:@selector(setBackgroundColor:)]) {
    // set the background layer since IKImageView supports it
}
这里,
mipmapBrowserView
是最先在Mac OS X 10.5中引入的
iImageView
的一个实例。IKImageView的
setBackgroundColor:
方法只是在10.6中添加的,所以我需要在调用它之前进行检查。这使我能够基于10.6SDK进行构建,并利用新功能,但仍然支持OSX10.5。虽然本例涉及OSX而不是iOS,但同样的方法(双关语?)也适用于iOS

请注意,当您对一个类进行子类化时,情况略有不同,您想知道超类是否响应某个选择器:

“无法通过使用super关键字向对象发送respondsToSelector:来测试对象是否从其超类继承方法。此方法仍将作为一个整体测试对象,而不仅仅是测试超类的实现。因此,将respondsToSelector:发送到super相当于将其发送到self。相反,您必须直接在对象的超类上调用NSObject类方法InstanceRespondToSelector:”

  • 我发现最好的方法是:使用旧SDK编译代码:)

  • 我认为这个问题与我的想法有关

  • 我相信有一天苹果会允许通过简单的定义来编译旧SDK的项目

  • 我找到了解决办法


  • 4.3 5.0和5.1 SDK在尝试重新定义此宏后无法编译

    最简单的方法是使用允许的预处理器定义的IPHONE OS版本

    您可以通过添加

    __IPHONE_OS_VERSION_MAX_ALLOWED=__IPHONE_4_2
    
    或者类似于目标的生成设置中的“预处理器宏”选项。您可以在中查找可用的版本

    不幸的是,如果添加此定义,将导致与预编译头不匹配的错误。因此,要解决此问题,还需要关闭生成设置中的“预编译前缀头”选项

    一旦您这样做了,您将得到一系列目标SDK上不存在的类的错误(例如,iOS 4.2中不存在SensorDerSet)。如果您试图返回iOS 4之前的版本,您可能会遇到太多错误,以致编译器无法处理--我不知道有什么解决方法。在任何情况下,请忽略UIKit标题中缺少类的错误,并转到错误列表的底部;在那里,您应该在每次使用未包含在中的方法或类时都会发现一个错误允许IPHONE OS版本MAX指向的SDK。请确保每个方法都包含在

    if( [targetObject respondsToSelector:@selector(thePossiblyMissingSelector:)]
    
    您应该是安全的。可能丢失的类也应该进行测试

    if ([NSOrderedSet class] != nil)
    
    但是,这些设置并不是您希望意外忘记翻转的。要使其成为测试的自动选项,请执行以下操作:

  • 创建一个名为“旧SDK测试”的新构建配置
  • 仅为此配置定义允许的IPHONE版本和预编译头选项(点击构建设置中每行旁边的显示箭头以访问每个配置设置)
  • 复制当前方案,并将其名称设置为“Old SDK Check”
  • 将此新方案中运行项的生成配置设置为在步骤1中创建的生成配置
  • 选择新方案并生成
  • 注释

    • 我不能保证这会抓住你的任何/所有问题
    • 此支票不会记录UIKit之外的任何内容
    • 这不能替代在您需要的iOS版本上测试代码 计划支持

    我认为他希望在低于基本sdk的iOS上对缺少的方法发出编译时警告。XCode只会在编译时为当前安装的基本sdk发出警告,所以我认为这是不可能的。如果只需要测试一台设备,你可以为该设备编写一系列测试用例并运行这些测试用例。没错!就是这样ot可能:(.if的可能副本([SensorDeredSet类]!=nil)在iOS 4.2+上运行得更好,编译时带有LLVM 1.6+。(请参阅)
    if ([NSOrderedSet class] != nil)