gpt4 book ai didi

ios - CoreTelephony 因 : Received a notification with no notification name 原因崩溃

转载 作者:可可西里 更新时间:2023-11-01 06:02:44 26 4
gpt4 key购买 nike

我每天都会收到大约 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";
}
}

最佳答案

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

There is an iOS bug that causes instances of the CTTelephonyNetworkInfo class to sometimes get notifications after they have been deallocated. Instead of instantiating, using, and releasing instances you must instead retain and never release them to work around the bug.

从回溯的外观来看,这闻起来像僵尸。为什么不尝试使用从未按照链接问题中的建议发布的 CTTelephonyNetworkInfo 静态实例?

@import CoreTelephony;

// ...

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

关于ios - CoreTelephony 因 : Received a notification with no notification name 原因崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38434686/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com