iOS   发布时间:2022-03-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – CoreTelephony因原因崩溃:收到没有通知名称的通知大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我每天收到大约5,000个报告的问题,原因是“收到了没有通知名称通知”.

Application Specific Information:
*** TerminaTing app due to uncaught exception 'NSInternalInconsistencyException'  reason: 'Received a notification with no notification name'

Last Exception BACktrace:
0   CoreFoundation                      0x000000018206e950 __exceptionPreprocess + 132
1   libobjc.A.dylib                     0x000000018e5741fc objc_exception_throw + 60
2   CoreFoundation                      0x000000018206e810 +[NSException raise:format:arguments:] + 116
3   Foundation                          0x0000000182ba6db4 -[NSAssertionHandler handleFailureInMethod:object:file:linenumber:description:] + 112
4   CoreTelephony                       0x00000001827ca39c -[CTTelephonyNetworkInfo handleNotificationFromConnection:ofType:withInfo:] + 272
5   CoreTelephony                       0x00000001827c9784 _ServerConnectionCallBACk(__CTServerConnection*,__CFString const*,__CFDictionary const*,void*) + 152
6   CoreTelephony                       0x00000001827de958 ___ZNK13CTServerState21sendNotification_syncE7CTEventPK10__CFStringPK14__CFDictionary_block_invoke15 + 32
7   libdispatch.dylib                   0x000000018eb4c014 _dispatch_call_block_and_release + 24
8   libdispatch.dylib                   0x000000018eb4bfd4 _dispatch_client_callout + 16
9   libdispatch.dylib                   0x000000018eb524a8 _dispatch_queue_drain + 640
10  libdispatch.dylib                   0x000000018eb4e4c0 _dispatch_queue_invoke + 68
11  libdispatch.dylib                   0x000000018eb530f4 _dispatch_root_queue_drain + 104
12  libdispatch.dylib                   0x000000018eb534fc _dispatch_worker_thread2 + 76
13  libsystem_pthread.dylib             0x000000018ece16bc _pthread_wqthread + 356
14  libsystem_pthread.dylib             0x000000018ece154c start_wqthread + 4

我发现所有CoreTelephony通知并尝试重现该问题但失败了.

/* For use with the CoreTelephony notification system. */
    extern CFStringRef kCTRegistrationStatusChangedNotification;
    extern CFStringRef kCTRegistrationStateDurationReportNotification;
    extern CFStringRef kCTRegistrationserviceProviderNameChangedNotification;
    extern CFStringRef kCTRegistrationOperatorNameChangedNotification;
    extern CFStringRef kCTRegistrationNewservingNetworkNotification;
    extern CFStringRef kCTRegistrationDataStatusChangedNotification;
    extern CFStringRef kCTRegistrationDataActivateFailedNotification;
    extern CFStringRef kCTRegistrationCellularDataPlanHideInDicatorNotification;
    extern CFStringRef kCTRegistrationCellularDataPlanActivateFailedNotification;
    extern CFStringRef kCTRegistrationCustomerserviceProfileupdateNotification;
    extern CFStringRef kCTRegistrationCellChangedNotification;
    extern CFStringRef kCTRegistrationCauseCodeNotification;

为什么我会这次崩溃?
我怎样才能更改我的代码,以便我不再遇到这个问题
任何帮助都非常感谢.

编辑:

我正在使用Reachability类(https://github.com/tonymillion/Reachability)来检测网络类型.

+ (NSString *)networkName
 {    
    Reachability *reach = [Reachability reachabilityForInternetConnection];
    [reach startNotifier];

    NetworkStatus networkStatus = [reach currentReachabilityStatus];
    CTTelephonyNetworkInfo *telephonyInfo = [[CTTelephonyNetworkInfo alloc] init];

    if (networkStatus == ReachableViaWiFi) {
        return @"WIFI";
    } else if (networkStatus == ReachableViaWWAN) {
        if ([telephonyInfo respondsToSELEctor:@SELEctor(currenTradioAccessTechnology)]) { 
            if ([[telephonyInfo currenTradioAccessTechnology] isEqualToString:CTradioAccessTechnologyGPRS]) {
                return @"GPRS";
            } else if ([[telephonyInfo currenTradioAccessTechnology]  isEqualToString:CTradioAccessTechnologyEdge]) {
                return @"EDGE";
            } else if ([[telephonyInfo currenTradioAccessTechnology]  isEqualToString:CTradioAccessTechnologyWCDMA]) {
                return @"WCDMA";
            } else if ([[telephonyInfo currenTradioAccessTechnology]  isEqualToString:CTradioAccessTechnologyHSDPA]) {
                return @"HSDPA";
            } else if ([[telephonyInfo currenTradioAccessTechnology]  isEqualToString:CTradioAccessTechnologyHSUPA]) {
                return @"HSUPA";
            } else if ([[telephonyInfo currenTradioAccessTechnology]  isEqualToString:CTradioAccessTechnologyCDMA1x]) {
                return @"CDMA1X";
            } else if ([[telephonyInfo currenTradioAccessTechnology]  isEqualToString:CTradioAccessTechnologyCDMAEVDORev0]) {
                return @"CDMAEVDOREV0";
            } else if ([[telephonyInfo currenTradioAccessTechnology]  isEqualToString:CTradioAccessTechnologyCDMAEVDORevA]) {
                return @"CDMAEVDOREVA";
            } else if ([[telephonyInfo currenTradioAccessTechnology]  isEqualToString:CTradioAccessTechnologyCDMAEVDORevB]) {
                return @"CDMAEVDOREVB";
            } else if ([[telephonyInfo currenTradioAccessTechnology]  isEqualToString:CTradioAccessTechnologyeHRPD]) {
                return @"HRPD";
            } else if ([[telephonyInfo currenTradioAccessTechnology]  isEqualToString:CTradioAccessTechnologyLTE]) {
                return @"LTE";
            }
            return @"UNKNowN";
        } else {
            return @"WWAN";
        }
    } else {
        return @"NotReachable";
    }
}

解决方法

我想知道这是否与旧版TestFlight的 this similar issue有关:

你的回溯看起来就像一个僵尸.为什么不尝试使用CTTelephonyNetworkInfo的静态实例,这个实例从未按链接问题的建议发布?

@import CoreTelephony;

// ...

static CTTelephonyNetworkInfo *neTinfo;
static dispatch_once_t dispatchToken;
if (!neTinfo) {
    dispatch_once(&dispatchToken,^{
        neTinfo = [[CTTelephonyNetworkInfo alloc] init];
    });
}

大佬总结

以上是大佬教程为你收集整理的ios – CoreTelephony因原因崩溃:收到没有通知名称的通知全部内容,希望文章能够帮你解决ios – CoreTelephony因原因崩溃:收到没有通知名称的通知所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。