7

我正在尝试使用subscriberCellularProvider 制作列表运营商。但我遇到了一个问题,即“ ‘subscriberCellularProvider’在 iOS 12.0 中已被弃用:被 serviceSubscriberCellularProviders 取代

我正在使用 XCode 11.4.1 和 iOS 13。有人可以帮我解决这个问题吗?

4

3 回答 3

9

警告告诉你应该CTTelephonyNetworkInfo().serviceSubscriberCellularProviders改用它,它返回一个可选的类型字典[String : CTCarrier]?。可能被添加以支持具有多个 SIM 卡的设备(例如,带有 SIM + eSIM 的 iPhone XR)

我不知道要在字典中使用哪个键,在我的情况下(iPhone 8)我只有一个带键的对象,0000000100000001所以我得到了载体:

CTTelephonyNetworkInfo().serviceSubscriberCellularProviders?["0000000100000001"]

您可以尝试:

CTTelephonyNetworkInfo().serviceSubscriberCellularProviders?.first?.value

但显然不能保证您会在应用程序的不同执行之间获得相同的信息。

我找不到任何关于它的进一步文档

于 2020-05-14T09:59:34.410 回答
3

'subscriberCellularProvider' 已弃用:在 iOS 12.0 中首次弃用 将 'subscriberCellularProvider' 替换为 'serviceSubscriberCellularProviders'

#import <CoreTelephony/CTTelephonyNetworkInfo.h>
#import <CoreTelephony/CTCarrier.h>


CTTelephonyNetworkInfo *networkInfo = [[CTTelephonyNetworkInfo alloc] init];

NSDictionary<NSString *, CTCarrier *> *providers= [networkInfo serviceSubscriberCellularProviders];
                
CTCarrier *carrier = providers.allValues.firstObject;
                
NSString* isoCountryCode = carrier.isoCountryCode;
                
NSString* mobileNetworkCode = carrier.mobileNetworkCode;
                
NSString* mobileCountryCode = carrier.mobileCountryCode;
                
NSString* carrierName = carrier.carrierName;
            
于 2020-10-14T12:57:49.000 回答
0

@Andr3a88 的答案并不准确。对于带有 2 张 SIM 卡的 iPhone,CTTelephonyNetworkInfo().serviceSubscriberCellularProviders至少返回 2 个元素,其中一个可能有运营商,因为

CTCarrier (0x283d8e940) {
    Carrier name: [<nil>]
    Mobile Country Code: [<nil>]
    Mobile Network Code:[<nil>]
    ISO Country Code:[<nil>]
    Allows VOIP? [YES]

我猜对于未使用的 eSIM。

因此最好检查运营商名称是否为 NIL

let netInfo = CTTelephonyNetworkInfo()
let carrier = netInfo.serviceSubscriberCellularProviders?.filter({ $0.value.carrierName != nil }).first?.value
于 2022-02-15T00:41:51.347 回答