'currentRadioAccessTechnology'已被弃用:自iOS 12.0开始首次被弃用。

4

我刚接触Objective-C,以下代码出现问题:它显示“currentRadioAccessTechnology”已被弃用:从iOS 12.0开始首次弃用。将“currentRadioAccessTechnology”替换为“serviceCurrentRadioAccessTechnology”。如果我替换我的代码,会出现以下错误:“NSDictionary<NSString *,NSString *>”没有声明选择器“isEqualToString:”

- (NSString*)w3cConnectionTypeFor:(CDVReachability*)reachability
{
    NetworkStatus networkStatus = [reachability currentReachabilityStatus];

    switch (networkStatus) {
        case NotReachable:
            return @"none";

        case ReachableViaWWAN:
        {
            BOOL isConnectionRequired = [reachability connectionRequired];
            if (isConnectionRequired) {
                return @"none";
            } else {
                if ([[[UIDevice currentDevice] systemVersion] compare:@"7.0" options:NSNumericSearch] != NSOrderedAscending) {
                    CTTelephonyNetworkInfo *telephonyInfo = [CTTelephonyNetworkInfo new];
                    if ([telephonyInfo.serviceCurrentRadioAccessTechnology  isEqualToString:CTRadioAccessTechnologyGPRS]) {
                        return @"2g";
                    } else if ([telephonyInfo.currentRadioAccessTechnology  isEqualToString:CTRadioAccessTechnologyEdge]) {
                        return @"2g";
                    } else if ([telephonyInfo.currentRadioAccessTechnology  isEqualToString:CTRadioAccessTechnologyWCDMA]) {
                        return @"3g";
                    } else if ([telephonyInfo.currentRadioAccessTechnology  isEqualToString:CTRadioAccessTechnologyHSDPA]) {
                        return @"3g";
                    } else if ([telephonyInfo.currentRadioAccessTechnology  isEqualToString:CTRadioAccessTechnologyHSUPA]) {
                        return @"3g";
                    } else if ([telephonyInfo.currentRadioAccessTechnology  isEqualToString:CTRadioAccessTechnologyCDMA1x]) {
                        return @"3g";
                    } else if ([telephonyInfo.currentRadioAccessTechnology  isEqualToString:CTRadioAccessTechnologyCDMAEVDORev0]) {
                        return @"3g";
                    } else if ([telephonyInfo.currentRadioAccessTechnology  isEqualToString:CTRadioAccessTechnologyCDMAEVDORevA]) {
                        return @"3g";
                    } else if ([telephonyInfo.currentRadioAccessTechnology  isEqualToString:CTRadioAccessTechnologyCDMAEVDORevB]) {
                        return @"3g";
                    } else if ([telephonyInfo.currentRadioAccessTechnology  isEqualToString:CTRadioAccessTechnologyeHRPD]) {
                        return @"3g";
                    } else if ([telephonyInfo.currentRadioAccessTechnology  isEqualToString:CTRadioAccessTechnologyLTE]) {
                        return @"4g";
                    }
                }
                return @"cellular";
            }
        }
        case ReachableViaWiFi:
        {
            BOOL isConnectionRequired = [reachability connectionRequired];
            if (isConnectionRequired) {
                return @"none";
            } else {
                return @"wifi";
            }
        }
        default:
            return @"unknown";
    }
}

2
serviceCurrentRadioAccessTechnology 是一个字典,而不是字符串,因为设备可能有双卡,因此可能有多个运营商。您需要从每个字典条目中获取值。检索字典键并使用它来访问服务类型。 - Paulw11
你的应用程序真的不应该基于连接类型做出决策。网络框架可以告诉你是否处于低数据网络,你可以根据这个来做出决策。 - Paulw11
1个回答

5
您需要使用类似以下的内容:
let dict = CTTelephonyNetworkInfo().serviceCurrentRadioAccessTechnology
let firstValue = dict.values.first 

等同于旧版本

serviceCurrentRadioAccessTechnology

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接