Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 致命异常:在UITableview中使用UISwitch时发生NSInvalidArgumentException_Ios_Swift - Fatal编程技术网

Ios 致命异常:在UITableview中使用UISwitch时发生NSInvalidArgumentException

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

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                         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(),而不是创建新的管理器