Ios 致命异常:在UITableview中使用UISwitch时发生NSInvalidArgumentException
AppName表示应用程序名称。 用户报告了此崩溃。它只出现过一次,而且在我这边也无法重现。因此无法调试。如果有人能提供一些相同的见解 下面是收到的Crashlytics日志Ios 致命异常:在UITableview中使用UISwitch时发生NSInvalidArgumentException,ios,swift,Ios,Swift,AppName表示应用程序名称。 用户报告了此崩溃。它只出现过一次,而且在我这边也无法重现。因此无法调试。如果有人能提供一些相同的见解 下面是收到的Crashlytics日志 # OS Version: 12.4.2 (16G114) # Device: iPhone 5s # RAM Free: 8.5% # Disk Free: 9.6% #0. Crashed: com.twitter.crashlytics.ios.exception 0 App Name
# OS Version: 12.4.2 (16G114)
# Device: iPhone 5s
# RAM Free: 8.5%
# Disk Free: 9.6%
#0. Crashed: com.twitter.crashlytics.ios.exception
0 App Name 0x100df7388 CLSProcessRecordAllThreads + 376 (CLSProcess.c:376)
1 App Name 0x100df7770 CLSProcessRecordAllThreads + 407 (CLSProcess.c:407)
2 App Name 0x100de7474 CLSHandler + 26 (CLSHandler.m:26)
3 App Name 0x100df599c __CLSExceptionRecord_block_invoke + 198 (CLSException.mm:198)
4 libdispatch.dylib 0x1db6217d4 _dispatch_client_callout + 16
5 libdispatch.dylib 0x1db5cfc1c _dispatch_lane_barrier_sync_invoke_and_complete + 56
6 App Name 0x100df5444 CLSExceptionRecord + 205 (CLSException.mm:205)
7 App Name 0x100df5278 CLSExceptionRecordNSException + 102 (CLSException.mm:102)
8 App Name 0x100df4e9c CLSTerminateHandler() + 258 (CLSException.mm:258)
9 libc++abi.dylib 0x1dadb0838 std::__terminate(void (*)()) + 16
10 libc++abi.dylib 0x1dadb0434 __cxa_rethrow + 144
11 libobjc.A.dylib 0x1dadbbbc8 objc_exception_rethrow + 44
12 CoreFoundation 0x1dbb72030 CFRunLoopRunSpecific + 544
13 GraphicsServices 0x1ddd7379c GSEventRunModal + 104
14 UIKitCore 0x2084f3c38 UIApplicationMain + 212
15 App Name 0x100c1ee1c main + 23 (ViewController.swift:23)
16 libdyld.dylib 0x1db6328e0 start + 4
--
Fatal Exception: NSInvalidArgumentException
0 CoreFoundation 0x1dbbe6190 __exceptionPreprocess
1 libobjc.A.dylib 0x1dadbb9f8 objc_exception_throw
2 CoreFoundation 0x1dbaf03b0 -[NSCache init]
3 CFNetwork 0x1dc3f4b58 -[NSURLSessionTask cancel]
4 App Name 0x100cb9fec ViewController.switchChanged(_:) (ViewController.swift)
5 App Name 0x100cbac7c @objc ViewController.switchChanged(_:) (<compiler-generated>)
6 UIKitCore 0x2084f5300 -[UIApplication sendAction:to:from:forEvent:]
7 UIKitCore 0x207f9e424 -[UIControl sendAction:to:forEvent:]
8 UIKitCore 0x207f9e744 -[UIControl _sendActionsForEvents:withEvent:]
9 UIKitCore 0x207fcb0fc -[UISwitchModernVisualElement sendStateChangeActions]
10 UIKitCore 0x207fcaa04 -[UISwitchMVEGestureTrackingSession _sendStateChangeActionsIfNecessary]
11 UIKitCore 0x207fcb7a4 -[UISwitchModernVisualElement _handleLongPressWithGestureLocationInBounds:gestureState:]
12 UIKitCore 0x20811cac4 -[UIGestureRecognizerTarget _sendActionWithGestureRecognizer:]
13 UIKitCore 0x208124ccc _UIGestureRecognizerSendTargetActions
14 UIKitCore 0x208122670 _UIGestureRecognizerSendActions
15 UIKitCore 0x208121b9c -[UIGestureRecognizer _updateGestureWithEvent:buttonEvent:]
16 UIKitCore 0x208115c78 _UIGestureEnvironmentUpdate
17 UIKitCore 0x2081153a8 -[UIGestureEnvironment _deliverEvent:toGestureRecognizers:usingBlock:]
18 UIKitCore 0x208115188 -[UIGestureEnvironment _updateForEvent:window:]
19 UIKitCore 0x20852d7d0 -[UIWindow sendEvent:]
20 UIKitCore 0x20850d85c -[UIApplication sendEvent:]
21 UIKitCore 0x2085d39d4 __dispatchPreprocessedEventFromEventQueue
22 UIKitCore 0x2085d6100 __handleEventQueueInternal
23 UIKitCore 0x2085cf330 __handleHIDEventFetcherDrain
24 CoreFoundation 0x1dbb77f2c __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__
25 CoreFoundation 0x1dbb77eac __CFRunLoopDoSource0
26 CoreFoundation 0x1dbb77794 __CFRunLoopDoSources0
27 CoreFoundation 0x1dbb726d0 __CFRunLoopRun
28 CoreFoundation 0x1dbb71fc4 CFRunLoopRunSpecific
29 GraphicsServices 0x1ddd7379c GSEventRunModal
30 UIKitCore 0x2084f3c38 UIApplicationMain
31 App Name 0x100c1ee1c main + 23 (ViewController.swift:23)
32 libdyld.dylib 0x1db6328e0 start
下面是UISwitch按钮值更改时调用的函数
case 13:
if sender.isOn{
UserDefaultUtility.saveToUserDefault(value: true, key: Constant.UserDefaults.k_IsAnimation)
appDelegate.getPollutantAbbreviationAndGIFImages()
} else {
let networkManager = NetworkManager()
networkManager.cancelImageDownloadTask()
}
以下是Network Manager中的功能:
func cancelImageDownloadTask() {
self.downloadImagesSession?.cancel()
}
下载会话是下面声明的URLSessionDownloadTask对象
weak var downloadImagesSession: URLSessionDownloadTask?
它是使用下面的代码分配的
self.downloadImagesSession = session.downloadTask(with: request) { (tempLocalUrl, response, error) in
}
这似乎就是问题所在:
let networkManager = NetworkManager()
networkManager.cancelImageDownloadTask()
您只需初始化NetworkManager实例,然后直接尝试取消任务。但您不能取消尚未启动的任务,这似乎是问题所在:
let networkManager = NetworkManager()
networkManager.cancelImageDownloadTask()
您只需初始化NetworkManager实例,然后直接尝试取消任务。但您不能取消尚未启动的任务您能展示一下在切换情况下发生的线路崩溃情况吗?崩溃日志表明您正在执行一些网络代码。我已通过添加更多代码编辑了上述问题。您能否显示在交换机情况下发生的线路崩溃情况?崩溃日志表明您正在执行一些网络代码我已通过添加更多代码编辑了上述问题。但是在cancelImageDownloadTask()函数->self.downloadImagesSession?.cancel()中。这里downloadImagesSession使用可选链接+它被声明为弱。它不应该崩溃。嗯,对。但为什么要在没有运行任务的新管理器上调用cancel()?在哪里初始化self.downloadImagesSession?self.downloadImagesSession在从AppDelegate调用的networkmanager类中初始化。如果我从AppDelegate中的network manager对象调用cancelImageDownloadTask函数。这应该可以工作:appDelegate.networkManager.cancelImageDownloadTask()而不是创建新的管理器,但在cancelImageDownloadTask()函数->self.downloadImagesSession?.cancel()中。这里downloadImagesSession使用可选链接+它被声明为弱。它不应该崩溃。嗯,对。但为什么要在没有运行任务的新管理器上调用cancel()?在哪里初始化self.downloadImagesSession?self.downloadImagesSession在从AppDelegate调用的networkmanager类中初始化。如果我从AppDelegate中的network manager对象调用cancelImageDownloadTask函数。这应该可以工作:appDelegate.networkManager.cancelImageDownloadTask(),而不是创建新的管理器