SDK版本10功能可以在系统版本为8的设备上运行吗?

时间:2017-05-18 08:46:41

标签: ios objective-c

我创建了一个按钮来呼叫某人,我曾经这样编码:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"123"] options:@{} completionHandler:^(BOOL success) {

                }];

但是现在我注意到这个功能有一个警告,在iOS10中Apple为它提供了一个新功能,它在这里:

- (void)changeTimeIntervalWithInterval:(NSInteger)timeInterval{

if (self.timer) {
    [self.timer invalidate];
    self.timer = nil;

    self.timer = [NSTimer scheduledTimerWithTimeInterval:timeInterval target:self selector:@selector(printHH) userInfo:nil repeats:YES];
 } 
}

它有一个参数,所以如果用户点击确认按钮,我就可以获得该参数。
但是如果设备有系统版本8会出现任何错误,我不确定此功能;

英语不是我的母语,请原谅我的语法错误,我在谷歌搜索但没有任何用处。 有任何想法吗 ?
非常感谢!
刘畅。

2 个答案:

答案 0 :(得分:1)

你是正确的;如果您尝试在早期版本的iOS上调用iOS 10方法,您将获得运行时“不响应选择器”异常。您有几个选择:

  1. 使用弃用的方法;它现在将继续工作,但在将来的iOS版本中将不再受支持,所以你最终必须处理它。
  2. 仅定位较新版本的iOS; iOS用户倾向于升级和定位iOS 9.x +将覆盖绝大多数iOS用户。这种情况下的方法仅限iOS 10,您可能不希望此时切断iOS 9(甚至iOS 8)用户
  3. 在运行时检查iOS版本并调用相应的方法:
  4. if ([[[UIDevice currentDevice] systemVersion] floatValue] < 10.0) {
        [[UIApplication sharedApplication] openURL:@"123"];
    } else {
       [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"123"] options:@{} completionHandler:^(BOOL success) {
    
                }];
    }
    

答案 1 :(得分:1)

您应该检查Base SDK版本和iOS版本,然后使用不同的API,如下所示:

#if  __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_9_3
    if ([UIDevice currentDevice].systemVersion.floatValue > 10.0f) {
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"123"] options:@{} completionHandler:^(BOOL success) {

        }];
    } else {
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"123"]];
    }
#else
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"123"]];
#endif