从未调用subscriberCellularProviderDidUpdateNotifier

时间:2014-06-09 13:48:54

标签: ios objective-c core-telephony

以下代码:

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卡,这个活动都没有被调用。

我做错了什么?

1 个答案:

答案 0 :(得分:5)

您需要对CTTelephonyNetworkInfo对象保持强引用。

<强>夫特:

在你的app委托类中,为此对象声明一个名为telephonyNetworkInfo的属性,如下所示:

let telephonyNetworkInfo = CTTelephonyNetworkInfo()

然后将其放入您的app delegate的didFinishLaunchingWithOptions方法:

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

<强>目标-C:

在您的app delegate的@interface(或其类扩展名)中,为此对象声明一个名为telephonyNetworkInfo的属性,而不是:

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

使用它:

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

然后当然把它放在你的app委托的didFinishLaunchingWithOptions方法中:

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