【问题标题】:subscriberCellularProvider was deprecated in iOS 12.0subscriberCellularProvider 在 iOS 12.0 中已弃用
【发布时间】:2020-08-23 10:11:57
【问题描述】:

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

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

【问题讨论】:

  • 建议使用serviceSubscriberCellularProviders而不是subscriberCellularProvider

标签: objective-c swift iphone cellular-network carrier


【解决方案1】:

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

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

CTTelephonyNetworkInfo().serviceSubscriberCellularProviders?["0000000100000001"]

你可以试试:

CTTelephonyNetworkInfo().serviceSubscriberCellularProviders?.first?.value

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

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

【讨论】:

  • 这工作正常。感谢您的帮助:)
【解决方案2】:

'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;
            

【讨论】:

【解决方案3】:

@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

【讨论】:

    猜你喜欢
    • 2019-05-03
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多