2016-08-16 36 views
3

我困惑地搞清楚如何解決「此應用程序正在修改後臺線程的自動佈局引擎」錯誤。任何幫助是極大的讚賞。「這個應用程序正在修改自動佈局引擎」錯誤(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 
) 

謝謝你的任何意見或想法!

+2

你檢查,是否FIRAuth回調是在主線程? – mbutan

+0

這幾乎肯定不是。對FIRAuth回調中的主線程執行另一個dispatch_async。 – par

+0

您能否更具體地說明FIRAuth回調是否在主線程中是什麼意思?我知道足夠的危險與Firebase和iOS,但我不是專家。不知道你提到的其他dispatch_async應該在哪裏。謝謝。 – Ben

回答

6

試試這個:

FIRAuth.auth()?.sendPasswordResetWithEmail(userEnteredEmail!, completion: { error in 
    dispatch_async(dispatch_get_main_queue(), { 
    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) 
    } 
    }) 
}) 
+0

是的!那是我錯過的。謝謝!!! – Ben

0

應儘量象徵斷點檢測問題: - enter image description here

然後把你的UI更新的代碼在主線程

DispatchQueue.main.async {} 
相關問題