我困惑地搞清楚如何解決「此應用程序正在修改後臺線程的自動佈局引擎」錯誤。任何幫助是極大的讚賞。「這個應用程序正在修改自動佈局引擎」錯誤(Swift iOS)
我嘗試了從this similar question概述的方法來使用dispatch_async(dispatch_get_main_qeueu()),但它沒有解決問題。我使用不正確?
從調試中我發現Firebase調用重置用戶密碼至少是問題的一部分。當我遺漏了代碼時,沒有錯誤。
相關代碼和完全錯誤信息低於:
//MARK: - Forgot Password Button Tapped
@IBAction func forgotPasswordButtonTapped(sender: AnyObject) {
let userEnteredEmail = emailTextField.text
//Have Firebase send email to reset password
dispatch_async(dispatch_get_main_queue(), {
FIRAuth.auth()?.sendPasswordResetWithEmail(userEnteredEmail!, completion: { error in
if error != nil {
//Tell user that the user name or password is incorrect.
let errorCode = error!.code
switch (errorCode) {
// Error code handling alerting user to issue.
}
}
else {
//Send user to the forgot password screen.
self.performSegueWithIdentifier("toForgotPasswordViewController", sender: self)
}
})
})
}
}
完整的錯誤拋出:
This application is modifying the autolayout engine from a background thread, which can lead to engine corruption and weird crashes. This will cause an exception in a future release.
Stack:(
0 CoreFoundation 0x000000010a87dd85 __exceptionPreprocess + 165
1 libobjc.A.dylib 0x000000010c6a5deb objc_exception_throw + 48
2 CoreFoundation 0x000000010a87dcbd +[NSException raise:format:] + 205
3 Foundation 0x000000010adf8b6b _AssertAutolayoutOnMainThreadOnly + 79
4 Foundation 0x000000010adf8a62 -[NSISEngine _optimizeWithoutRebuilding] + 49
5 Foundation 0x000000010ac57c0f -[NSISEngine optimize] + 46
6 Foundation 0x000000010ac5842d -[NSISEngine withBehaviors:performModifications:] + 245
7 UIKit 0x000000010b9e6adb -[UIView(AdditionalLayoutSupport) _withAutomaticEngineOptimizationDisabledIfEngineExists:] + 58
8 UIKit 0x000000010b9e761e -[UIView(AdditionalLayoutSupport) updateConstraintsIfNeeded] + 254
9 UIKit 0x000000010b9e8333 -[UIView(AdditionalLayoutSupport) _updateConstraintsAtEngineLevelIfNeeded] + 272
10 UIKit 0x000000010b19ca96 -[UIView(Hierarchy) _updateConstraintsAsNecessaryAndApplyLayoutFromEngine] + 159
11 UIKit 0x000000010b1ac980 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 703
12 QuartzCore 0x0000000109e05c00 -[CALayer layoutSublayers] + 146
13 QuartzCore 0x0000000109dfa08e _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 366
14 QuartzCore 0x0000000109df9f0c _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24
15 QuartzCore 0x0000000109dee3c9 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 277
16 QuartzCore 0x0000000109e1c086 _ZN2CA11Transaction6commitEv + 486
17 QuartzCore 0x0000000109e1c378 _ZN2CA11Transaction14release_threadEPv + 224
18 libsystem_pthread.dylib 0x000000010d4d7387 _pthread_tsd_cleanup + 470
19 libsystem_pthread.dylib 0x000000010d4d6f63 _pthread_exit + 117
20 libsystem_pthread.dylib 0x000000010d4d5582 pthread_attr_getschedpolicy + 0
21 libsystem_pthread.dylib 0x000000010d4d3341 start_wqthread + 13
)
謝謝你的任何意見或想法!
你檢查,是否FIRAuth回調是在主線程? – mbutan
這幾乎肯定不是。對FIRAuth回調中的主線程執行另一個dispatch_async。 – par
您能否更具體地說明FIRAuth回調是否在主線程中是什麼意思?我知道足夠的危險與Firebase和iOS,但我不是專家。不知道你提到的其他dispatch_async應該在哪裏。謝謝。 – Ben