没有调用subscriberCellularProviderDidUpdateNotifier

伊丹·莫西(Idan Moshe)

以下代码:

CTTelephonyNetworkInfo *info = [[CTTelephonyNetworkInfo alloc] init];
    info.subscriberCellularProviderDidUpdateNotifier = ^(CTCarrier *carrier) {
        dispatch_async(dispatch_get_main_queue(), ^{
            NSLog(@"User did change SIM");
        });
    };

里面:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
  • 还是无论我将代码放在哪里进行测试。

无论我要用iSO 7.1.1在iPad Air Mini Wifi + 3G上替换多少张SIM卡,都不会调用该事件。

我究竟做错了什么?

泰勒

您需要持有对该CTTelephonyNetworkInfo对象的强烈引用

Swift(iOS 12.0及更高版本):

在您的应用程序委托类中,为此对象声明一个属性,telephonyNetworkInfo如下所示:

let telephonyNetworkInfo = CTTelephonyNetworkInfo()

然后将其放入您的应用程序委托的didFinishLaunchingWithOptions方法中:

telephonyNetworkInfo.serviceSubscriberCellularProvidersDidUpdateNotifier = { [weak telephonyNetworkInfo] carrierIdentifier in
    let carrier: CTCarrier? = telephonyNetworkInfo?.serviceSubscriberCellularProviders?[carrierIdentifier]

    DispatchQueue.main.async {
        print("User did change SIM")
    }
}

Swift(iOS 12.0之前):

在您的应用程序委托类中,为此对象声明一个属性,telephonyNetworkInfo如下所示:

let telephonyNetworkInfo = CTTelephonyNetworkInfo()

然后将其放入您的应用程序委托的didFinishLaunchingWithOptions方法中:

telephonyNetworkInfo.subscriberCellularProviderDidUpdateNotifier = { carrier in
    DispatchQueue.main.async {
        print("User did change SIM")
    }
}

Objective-C(iOS 12.0之前):

在您的应用程序委托@interface(或其类扩展)中,为该对象声明一个属性telephonyNetworkInfo,而不是以下内容:

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

用这个:

self.telephonyNetworkInfo = [[CTTelephonyNetworkInfo alloc] init];

然后将其放入您的应用程序委托的didFinishLaunchingWithOptions方法中:

self.telephonyNetworkInfo.subscriberCellularProviderDidUpdateNotifier = ^(CTCarrier *carrier) {
    dispatch_async(dispatch_get_main_queue(), ^{
        NSLog(@"User did change SIM");
    });
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章