Ios 点击按钮时函数调用发生奇怪的崩溃
我对fabric的碰撞报告有问题,我没有收到:Ios 点击按钮时函数调用发生奇怪的崩溃,ios,swift,Ios,Swift,我对fabric的碰撞报告有问题,我没有收到: #0. Crashed: com.apple.main-thread 0 AppGone 0x1000d2ae0 SignupViewController.goToNext() -> () (SignupViewController.swift) 1 AppGone 0x1000d2b1c @objc SignupViewController.goToNext
#0. Crashed: com.apple.main-thread
0 AppGone 0x1000d2ae0 SignupViewController.goToNext() -> () (SignupViewController.swift)
1 AppGone 0x1000d2b1c @objc SignupViewController.goToNext() -> () (SignupViewController.swift)
2 UIKit 0x18f0367b0 -[UIApplication sendAction:to:from:forEvent:] + 96
3 UIKit 0x18f036730 -[UIControl sendAction:to:forEvent:] + 80
4 UIKit 0x18f020be4 -[UIControl _sendActionsForEvents:withEvent:] + 452
5 UIKit 0x18f03601c -[UIControl touchesEnded:withEvent:] + 584
6 UIKit 0x18f035b44 -[UIWindow _sendTouchesForEvent:] + 2484
7 UIKit 0x18f030d8c -[UIWindow sendEvent:] + 2988
8 UIKit 0x18f001858 -[UIApplication sendEvent:] + 340
9 UIKit 0x18f7eecb8 __dispatchPreprocessedEventFromEventQueue + 2736
10 UIKit 0x18f7e8720 __handleEventQueue + 784
11 CoreFoundation 0x189166278 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 24
12 CoreFoundation 0x189165bc0 __CFRunLoopDoSources0 + 524
13 CoreFoundation 0x1891637c0 __CFRunLoopRun + 804
14 CoreFoundation 0x189092048 CFRunLoopRunSpecific + 444
15 GraphicsServices 0x18ab15198 GSEventRunModal + 180
16 UIKit 0x18f06c628 -[UIApplication _run] + 684
17 UIKit 0x18f067360 UIApplicationMain + 208
18 AppGone 0x100045070 main (AppDelegate.swift:22)
19 libdispatch.dylib 0x1880745b8 (Missing)
--
#0. Crashed: com.apple.main-thread
0 AppGone 0x1000d2ae0 SignupViewController.goToNext() -> () (SignupViewController.swift)
1 AppGone 0x1000d2b1c @objc SignupViewController.goToNext() -> () (SignupViewController.swift)
2 UIKit 0x18f0367b0 -[UIApplication sendAction:to:from:forEvent:] + 96
3 UIKit 0x18f036730 -[UIControl sendAction:to:forEvent:] + 80
4 UIKit 0x18f020be4 -[UIControl _sendActionsForEvents:withEvent:] + 452
5 UIKit 0x18f03601c -[UIControl touchesEnded:withEvent:] + 584
6 UIKit 0x18f035b44 -[UIWindow _sendTouchesForEvent:] + 2484
7 UIKit 0x18f030d8c -[UIWindow sendEvent:] + 2988
8 UIKit 0x18f001858 -[UIApplication sendEvent:] + 340
9 UIKit 0x18f7eecb8 __dispatchPreprocessedEventFromEventQueue + 2736
10 UIKit 0x18f7e8720 __handleEventQueue + 784
11 CoreFoundation 0x189166278 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 24
12 CoreFoundation 0x189165bc0 __CFRunLoopDoSources0 + 524
13 CoreFoundation 0x1891637c0 __CFRunLoopRun + 804
14 CoreFoundation 0x189092048 CFRunLoopRunSpecific + 444
15 GraphicsServices 0x18ab15198 GSEventRunModal + 180
16 UIKit 0x18f06c628 -[UIApplication _run] + 684
17 UIKit 0x18f067360 UIApplicationMain + 208
18 AppGone 0x100045070 main (AppDelegate.swift:22)
19 libdispatch.dylib 0x1880745b8 (Missing)
#1. Thread
0 libsystem_kernel.dylib 0x188186a88 __workq_kernreturn + 8
1 libsystem_pthread.dylib 0x18824936c _pthread_wqthread + 1452
2 libsystem_pthread.dylib 0x188248db4 start_wqthread + 4
#2. Thread
0 libsystem_kernel.dylib 0x188186a88 __workq_kernreturn + 8
1 libsystem_pthread.dylib 0x18824936c _pthread_wqthread + 1452
2 libsystem_pthread.dylib 0x188248db4 start_wqthread + 4
#3. com.apple.uikit.eventfetch-thread
0 libsystem_kernel.dylib 0x18816816c mach_msg_trap + 8
1 libsystem_kernel.dylib 0x188167fdc mach_msg + 72
2 CoreFoundation 0x189165cec __CFRunLoopServiceMachPort + 192
3 CoreFoundation 0x189163908 __CFRunLoopRun + 1132
4 CoreFoundation 0x189092048 CFRunLoopRunSpecific + 444
5 Foundation 0x189ba0b1c -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 304
6 Foundation 0x189bc160c -[NSRunLoop(NSRunLoop) runUntilDate:] + 96
7 UIKit 0x18f9e1c7c -[UIEventFetcher threadMain] + 136
8 Foundation 0x189c9e50c __NSThread__start__ + 1024
9 libsystem_pthread.dylib 0x18824b860 _pthread_body + 240
10 libsystem_pthread.dylib 0x18824b770 _pthread_body + 282
11 libsystem_pthread.dylib 0x188248dbc thread_start + 4
#4. Thread
0 libsystem_kernel.dylib 0x188186a88 __workq_kernreturn + 8
1 libsystem_pthread.dylib 0x18824936c _pthread_wqthread + 1452
2 libsystem_pthread.dylib 0x188248db4 start_wqthread + 4
#5. com.twitter.crashlytics.ios.MachExceptionServer
0 AppGone 0x1002e7430 CLSProcessRecordAllThreads + 4297913392
1 AppGone 0x1002e7430 CLSProcessRecordAllThreads + 4297913392
2 AppGone 0x1002e72ec CLSProcessRecordAllThreads + 4297913068
3 AppGone 0x1002d7a9c CLSHandler + 4297849500
4 AppGone 0x1002d2a40 CLSMachExceptionServer + 4297828928
5 libsystem_pthread.dylib 0x18824b860 _pthread_body + 240
6 libsystem_pthread.dylib 0x18824b770 _pthread_body + 282
7 libsystem_pthread.dylib 0x188248dbc thread_start + 4
#6. com.apple.NSURLConnectionLoader
0 libsystem_kernel.dylib 0x18816816c mach_msg_trap + 8
1 libsystem_kernel.dylib 0x188167fdc mach_msg + 72
2 CoreFoundation 0x189165cec __CFRunLoopServiceMachPort + 192
3 CoreFoundation 0x189163908 __CFRunLoopRun + 1132
4 CoreFoundation 0x189092048 CFRunLoopRunSpecific + 444
5 CFNetwork 0x18987fcec +[NSURLConnection(Loader) _resourceLoadLoop:] + 336
6 Foundation 0x189c9e50c __NSThread__start__ + 1024
7 libsystem_pthread.dylib 0x18824b860 _pthread_body + 240
8 libsystem_pthread.dylib 0x18824b770 _pthread_body + 282
9 libsystem_pthread.dylib 0x188248dbc thread_start + 4
#7. GAIThread
0 libsystem_kernel.dylib 0x18816816c mach_msg_trap + 8
1 libsystem_kernel.dylib 0x188167fdc mach_msg + 72
2 CoreFoundation 0x189165cec __CFRunLoopServiceMachPort + 192
3 CoreFoundation 0x189163908 __CFRunLoopRun + 1132
4 CoreFoundation 0x189092048 CFRunLoopRunSpecific + 444
5 Foundation 0x189ba0b1c -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 304
6 Foundation 0x189bf52a0 -[NSRunLoop(NSRunLoop) run] + 88
7 AppGone 0x1002b2fac +[GAI threadMain:] + 4297699244
8 Foundation 0x189c9e50c __NSThread__start__ + 1024
9 libsystem_pthread.dylib 0x18824b860 _pthread_body + 240
10 libsystem_pthread.dylib 0x18824b770 _pthread_body + 282
11 libsystem_pthread.dylib 0x188248dbc thread_start + 4
#8. Thread
0 libsystem_kernel.dylib 0x188185e1c __psynch_cvwait + 8
1 libsystem_pthread.dylib 0x18824a9d0 _pthread_cond_wait + 640
2 libc++.1.dylib 0x187b753ec std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&) + 56
3 JavaScriptCore 0x18d93a548 void std::__1::condition_variable_any::wait<std::__1::unique_lock<bmalloc::Mutex> >(std::__1::unique_lock<bmalloc::Mutex>&) + 112
4 JavaScriptCore 0x18d93a4bc bmalloc::AsyncTask<bmalloc::Heap, void (bmalloc::Heap::*)()>::threadRunLoop() + 168
5 JavaScriptCore 0x18d93a39c std::__1::__shared_ptr_emplace<std::__1::mutex, std::__1::allocator<std::__1::mutex> >::~__shared_ptr_emplace() + 10
6 JavaScriptCore 0x18d93a64c void* std::__1::__thread_proxy<std::__1::tuple<void (*)(bmalloc::AsyncTask<bmalloc::Heap, void (bmalloc::Heap::*)()>*), bmalloc::AsyncTask<bmalloc::Heap, void (bmalloc::Heap::*)()>*> >(void*) + 92
7 libsystem_pthread.dylib 0x18824b860 _pthread_body + 240
8 libsystem_pthread.dylib 0x18824b770 _pthread_body + 282
9 libsystem_pthread.dylib 0x188248dbc thread_start + 4
#9. com.apple.CoreMotion.MotionThread
0 libsystem_kernel.dylib 0x18816816c mach_msg_trap + 8
1 libsystem_kernel.dylib 0x188167fdc mach_msg + 72
2 CoreFoundation 0x189165cec __CFRunLoopServiceMachPort + 192
3 CoreFoundation 0x189163908 __CFRunLoopRun + 1132
4 CoreFoundation 0x189092048 CFRunLoopRunSpecific + 444
5 CoreFoundation 0x1890df8d4 CFRunLoopRun + 112
6 CoreMotion 0x18feda7dc (null) + 187376
7 libsystem_pthread.dylib 0x18824b860 _pthread_body + 240
8 libsystem_pthread.dylib 0x18824b770 _pthread_body + 282
9 libsystem_pthread.dylib 0x188248dbc thread_start + 4
#10. Thread
0 libsystem_kernel.dylib 0x188186a88 __workq_kernreturn + 8
1 libsystem_pthread.dylib 0x188249188 _pthread_wqthread + 968
2 libsystem_pthread.dylib 0x188248db4 start_wqthread + 4
#11. Thread
0 libsystem_kernel.dylib 0x188186a88 __workq_kernreturn + 8
1 libsystem_pthread.dylib 0x18824936c _pthread_wqthread + 1452
2 libsystem_pthread.dylib 0x188248db4 start_wqthread + 4
当我测试这个的时候,它就工作了。我不明白它怎么会崩溃
还有一点很奇怪,@objc-goToNext方法,因为我声明它时没有@objc
有人知道的更多吗
编辑:
我测试了回调是否通过
if NSThread.isMainThread() { print("Main Thread") }
因此,取消hud不会是问题。尝试取消主线程上的SVProgressHUD.disclose(),因为您现在正在后台取消它,hud交互通常必须在主线程中完成
dispatch_async(dispatch_get_main_queue {
SVProgressHUD.dismiss()
})
我猜您的回调发生在视图控制器内存不足之后 无论何时进行异步调用,都应该将self转换为弱self
SVProgressHUD.show()
let selectedRow = self.pickerView.selectedRowInComponent(0)
let profileId = self.profiles[selectedRow].id
RemoteServiceFactory.serviceCall().updateUser(profileId) { [weak self] (result, error) in
SVProgressHUD.dismiss()
guard let weakSelf = self else { return }
if error != nil {
weakSelf.showErrorWithMessage("error")
} else {
weakSelf.goToNextStep(weakSelf[selectedRow])
}
}
我猜@objc是隐含的,因为您的类继承自NSObject。坠机报告中有没有提示原因的信息…无效地址或其他什么?没有,我看不出来。我真的不明白。如果没有选择任何内容,该方法可能会崩溃?如果RemoteServiceFactory.serviceCall()是对后端服务的调用,那么它的completionHandler实际上不在主线程上,而是它是异步方法回调在线程1上,所以它在主线程上。我认为这不是问题,对吗?我建议你试试这个。。。我也犯了同样的错误,这个问题真的解决了吗?因为我用if-NSThread.isMainThread(){print(“Main Thread”)}测试了我是否在主线程上。有时它不会让您知道…只是尝试一下
SVProgressHUD.show()
let selectedRow = self.pickerView.selectedRowInComponent(0)
let profileId = self.profiles[selectedRow].id
RemoteServiceFactory.serviceCall().updateUser(profileId) { [weak self] (result, error) in
SVProgressHUD.dismiss()
guard let weakSelf = self else { return }
if error != nil {
weakSelf.showErrorWithMessage("error")
} else {
weakSelf.goToNextStep(weakSelf[selectedRow])
}
}