iOS 12.0中已经废弃了subscriberCellularProvider。

13

我试图使用subscriberCellularProvider来创建列表载体。但是我遇到了一个问题,即"'subscriberCellularProvider'在iOS 12.0中已被弃用:被serviceSubscriberCellularProviders取代"。

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


建议使用 serviceSubscriberCellularProviders 而不是 subscriberCellularProvider - Vikram Parimi
3个回答

14
警告提示您应使用CTTelephonyNetworkInfo().serviceSubscriberCellularProviders,它返回一个可选的字典类型[String : CTCarrier]?。这可能是为了支持具有多个sim卡的设备(例如带SIM + eSIM的iPhone XR)。
对于字典,我无法确定要使用哪个键,在我的情况下(iPhone 8),我只有一个带有键0000000100000001的对象,所以我使用以下代码获取运营商信息: CTTelephonyNetworkInfo().serviceSubscriberCellularProviders?["0000000100000001"] 你还可以尝试以下代码: CTTelephonyNetworkInfo().serviceSubscriberCellularProviders?.first?.value 但显然不能保证在您的应用程序的不同执行之间获得相同的信息。
我找不到更多的相关文档。

这个运行良好。谢谢帮助 :) - Vladimir Sukanica

6

'subscriberCellularProvider'已弃用: iOS 12.0中首次弃用。请使用'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;
            

5
在你把这个复制到更多的地方之前,请花点时间阅读一下“是否可以在几个问题中添加重复答案?”(https://meta.stackexchange.com/questions/104227/is-it-acceptable-to-add-a-duplicate-answer-to-several-questions)。 - fcdt
这是一个解决方案,你从未解释在哪里写它? - Rehan Ali Khan
@RehanAliKhan 这个解决方案与上面提出的问题相关。我没明白重点在哪里?请详细说明。 - Haseeb Javed

4
@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

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