1

我已经尝试过以下两种代码。

运行:

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 4.0) {
    CFReadStreamSetProperty(theReadStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);
    CFWriteStreamSetProperty(theWriteStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP); 
}

编译时间:

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_4_0 {
    CFReadStreamSetProperty(theReadStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);
    CFWriteStreamSetProperty(theWriteStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP); 
}

kCFStreamNetworkServiceType并且kCFStreamNetworkServiceTypeVoIP是 iOS 4.0 中提供的常量。但是,由于某些原因,我需要将上述代码构建到带有 iOS 3.1 的设备中。如果我将上述代码构建到 iOS 3.1 的设备中,当我打开应用程序时它会崩溃。有没有办法解决这个问题?

4

2 回答 2

1

我同意 Apurv 的观点,您应该在 Xcode 构建设置中将Deployment Target设置为 iOS 3.1,并使用最新的Base SDK构建。但是,我不建议对操作系统版本进行测试。

操作系统版本不是浮点数。 "3.1.3"是有效的操作系统版本,但不是浮点数。此外,浮点数的比较从来都不是一个好主意。

相反,请使用其他 Stack Overflow 答案中的宏

if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"4.0")) {
    CFReadStreamSetProperty(theReadStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);
    CFWriteStreamSetProperty(theWriteStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP); 
}

编辑:作为为什么这是必要的示例,请考虑以下代码:

NSString* osVersion = @"3.1.3";
float x = [osVersion floatValue];
NSLog(@"OS version = %lf", x);
if (x >= 3.1) {
    NSLog(@"OS >= 3.1");
} else if (x < 3.1) {
    NSLog(@"OS < 3.1");
}

在 iPhone 5.0 模拟器上运行它会产生以下输出,这显然不是您想要的:

2012-07-31 17:56:38.155 HelloWorld[5856:f803] 操作系统版本 = 3.100000

2012-07-31 17:56:41.257 HelloWorld[5856:f803] 操作系统 < 3.1

如果您x在调试器中检查 的值,我将其视为3.0999999,这会触发不正确的比较结果。

于 2012-07-31T10:16:44.120 回答
0

您应该使用最新的 SDK 构建您的应用程序,并将部署目标提供给 iOS 3.1。

如果您进行以下检查,那么它不应该崩溃。

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 4.0) {
    CFReadStreamSetProperty(theReadStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);
    CFWriteStreamSetProperty(theWriteStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP); 
}
于 2012-07-31T09:54:45.483 回答