以下代码:
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卡,这个活动都没有被调用。
我做错了什么?
答案 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");
});
};