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 callback находится в основном потоке? – mbutan

+0

Это почти наверняка нет. Сделайте еще один dispatch_async в основной поток в обратном вызове FIRAuth. – par

+0

Не могли бы вы уточнить, что вы имеете в виду, если обратный вызов FIRAuth находится в основном потоке? Я знаю достаточно, чтобы быть опасным с Firebase и iOS, но я не эксперт. Не знаете, куда вы скажете эту другую отправку_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

Если попытаться Символическое Breakpoint обнаружить проблему: - enter image description here

Затем поместите ваш UI код Обновить в главном потоке

DispatchQueue.main.async {} 
Смежные вопросы