我正在尝试使用subscriberCellularProvider 制作列表运营商。但我遇到了一个问题,即“ ‘subscriberCellularProvider’在 iOS 12.0 中已被弃用:被 serviceSubscriberCellularProviders 取代”
我正在使用 XCode 11.4.1 和 iOS 13。有人可以帮我解决这个问题吗?
我正在尝试使用subscriberCellularProvider 制作列表运营商。但我遇到了一个问题,即“ ‘subscriberCellularProvider’在 iOS 12.0 中已被弃用:被 serviceSubscriberCellularProviders 取代”
我正在使用 XCode 11.4.1 和 iOS 13。有人可以帮我解决这个问题吗?
警告告诉你应该CTTelephonyNetworkInfo().serviceSubscriberCellularProviders
改用它,它返回一个可选的类型字典[String : CTCarrier]?
。可能被添加以支持具有多个 SIM 卡的设备(例如,带有 SIM + eSIM 的 iPhone XR)
我不知道要在字典中使用哪个键,在我的情况下(iPhone 8)我只有一个带键的对象,0000000100000001
所以我得到了载体:
CTTelephonyNetworkInfo().serviceSubscriberCellularProviders?["0000000100000001"]
您可以尝试:
CTTelephonyNetworkInfo().serviceSubscriberCellularProviders?.first?.value
但显然不能保证您会在应用程序的不同执行之间获得相同的信息。
我找不到任何关于它的进一步文档
'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;
@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