CTTelephonyNetworkInfo在iOS 12上返回nil

问题描述 投票:0回答:1

我有以下代码:

let networkStatus = CTTelephonyNetworkInfo()

func getCellularInfo() {
    if #available(iOS 12.0, *) {
        var info = networkStatus.serviceSubscriberCellularProviders
        if let aKey = networkStatus.value(forKey: "serviceSubscriberCellularProvider") {
            print("aKey: \(aKey)")
        }
    }
}

此代码返回:

aKey:{0000000100000001 =“CTCarrier(0x28282e610){\ n \ tCarrier名称:[Vodacom] \ n \ t移动国家代码:[655] \ n \ t移动网络代码:[01] \ n \ tISO国家代码:[za] \ n \ t允许VOIP?[YES] \ n} \ n“; }

我不熟悉这种方法,如何获得与键相关的值,例如\n\tMobile Country Code: [655]/n/

ios swift key-value core-telephony
1个回答
2
投票

serviceSubscriberCellularProviders上的属性CTTelephonyNetworkInfo返回由String键入的CTCarrier对象的字典。

var serviceSubscriberCellularProviders: [String : CTCarrier]?

您可以在声明的输出中看到:CTCarrier (0x28282e610) {...

你输出的代码不清楚,因为你发布的代码,语法正确,从不使用生成的info字典变量。

所以使用正确的代码(假设serviceSubscriberCellularProvider是关键):

let networkStatus = CTTelephonyNetworkInfo()
if let info = networkStatus.serviceSubscriberCellularProviders, 
   let carrier = info["serviceSubscriberCellularProvider"] {
    //work with carrier object
    print("MNC = \(carrier.mobileNetworkCode)")
}

但这似乎不适用于运行iOS 12.0.1的单个iPhone iPhone 7。 serviceSubscriberCellularProviders是零。具有双SIM卡硬件的新手机可能会有不同的反应。

但是,已弃用的属性仍然有效。

let networkStatus = CTTelephonyNetworkInfo()
if let carrier = networkStatus.subscriberCellularProvider {
    print("MNC = \(carrier.mobileNetworkCode ?? "NO CODE")")
}
© www.soinside.com 2019 - 2024. All rights reserved.