Animation + UIView setAnimationsEnabled вызывается из фонового потока Ошибка - PullRequest
0 голосов
/ 03 октября 2019

Я показываю начальный контроллер вида в моем приложении до завершения входа в систему. После успешного входа в систему я пытаюсь показать свой Main ViewController, используя приведенный ниже код в классе AppDelegate. Это показывает только контроллеры представления правильно, но это показывает ошибку. Возможно, я ошибаюсь в своем коде.

Я хочу, чтобы мой Main ViewController viewWillAppear () вызывался только после того, как вся работа, которую я делаю в AppDelegate, будет завершена.

Класс AppDelegate

class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        print("Inside App Delegate")

        self.window = UIWindow(frame: UIScreen.main.bounds)
        self.initializeAppViewState()

        LoginManager.shared.login() { (success) -> Void in
            if success {
                print("Login Successful")
                self.setupRootViewController()
            } else {
                print("Login Un-Successful")
            }
        }
        return true
    }

    func applicationWillResignActive(_ application: UIApplication) {
    }

    func applicationDidEnterBackground(_ application: UIApplication) {
    }

    func applicationWillEnterForeground(_ application: UIApplication) {
    }

    func applicationDidBecomeActive(_ application: UIApplication) {
    }

    func applicationWillTerminate(_ application: UIApplication) {
    }

    func initializeAppViewState() {
        if (!Thread.isMainThread) {
            DispatchQueue.main.async {
                self.initializeAppViewState()
            }
            return
        }

        self.window!.rootViewController = InitialViewController(nibName: "InitialViewController", bundle: Bundle.main)
        self.window!.makeKeyAndVisible()
    }

    func setupRootViewController() {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let viewController = storyboard.instantiateViewController(withIdentifier :"NavigationController") as! UINavigationController

        if let window = self.window, let rootViewController = window.rootViewController {
            var currentController = rootViewController
            while let presentedController = currentController.presentedViewController {
                currentController = presentedController
            }
            currentController.present(viewController, animated: true, completion: nil)
        }
    }
}

Ниже приведена ошибка, которую я получаю

Login Successful
2019-10-03 20:49:00.707020+0530 IoT Simulator[47491:1653133] [Animation] +[UIView setAnimationsEnabled:] being called from a background thread. Performing any operation from a background thread on UIView or a subclass is not supported and may result in unexpected and insidious behavior.                                                                                                                              trace=(
    0   UIKitCore                           0x0000000111b7bdda kFixedAnimationDuration_block_invoke_5 + 107
    1   libdispatch.dylib                   0x000000011016cdb5 _dispatch_client_callout + 8
    2   libdispatch.dylib                   0x000000011016e83c _dispatch_once_callout + 66
    3   UIKitCore                           0x0000000111b7bd6d +[UIView(Animation) setAnimationsEnabled:] + 76
    4   UIKitCore                           0x0000000111b7bebb +[UIView(Animation) performWithoutAnimation:] + 84
    5   UIKitCore                           0x0000000110e06d46 -[UIVisualEffectView _updateSubviews] + 325
    6   UIKitCore                           0x0000000110e07b56 -[UIVisualEffectView _configureAllEffects] + 1435
    7   UIKitCore                           0x0000000110e05fe5 -[UIVisualEffectView setBackgroundEffects:] + 396
    8   UIKitCore                           0x0000000110e100ee -[_UIBarBackground updateBackground] + 229
    9   UIKitCore                           0x0000000110e1039d -[_UIBarBackground transitionBackgroundViews] + 208
    10  UIKitCore                           0x0000000110e99bde -[_UINavigationBarVisualProviderModernIOS _updateBackgrounds] + 850
    11  UIKitCore                           0x0000000110e99e20 -[_UINavigationBarVisualProviderModernIOS layoutSubviews] + 272
    12  UIKitCore                           0x0000000110e4ee4c -[UINavigationBar layoutSubviews] + 256
    13  UIKitCore                           0x0000000111b89e69 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1417
    14  UIKitCore                           0x0000000110e4eba4 -[UINavigationBar layoutSublayersOfLayer:] + 248
    15  QuartzCore                          0x000000011310cd22 -[CALayer layoutSublayers] + 173
    16  QuartzCore                          0x00000001131119fc _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 396
    17  UIKitCore                           0x0000000111b74e2d -[UIView(Hierarchy) layoutBelowIfNeeded] + 646
    18  UIKitCore                           0x0000000110ffa271 -[UINavigationController _positionNavigationBarHidden:edge:initialOffset:] + 800
    19  UIKitCore                           0x0000000110ffa4f0 -[UINavigationController _positionNavigationBarHidden:edge:] + 388
    20  UIKitCore                           0x000000011100149d -[UINavigationController loadView] + 239
    21  UIKitCore                           0x00000001110a7d04 -[UIViewController loadViewIfRequired] + 172
    22  UIKitCore                           0x00000001110a8524 -[UIViewController view] + 27
    23  UIKitCore                           0x0000000110fcf5b4 -[_UIFullscreenPresentationController _setPresentedViewController:] + 89
    24  UIKitCore                           0x0000000110fc36aa -[UIPresentationController initWithPresentedViewController:presentingViewController:] + 133
    25  UIKitCore                           0x00000001110bb18a -[UIViewController _presentViewController:withAnimationController:completion:] + 3700
    26  UIKitCore                           0x00000001110bddd7 __63-[UIViewController _presentViewController:animated:completion:]_block_invoke + 98
    27  UIKitCore                           0x00000001110be2ef -[UIViewController _performCoordinatedPresentOrDismiss:animated:] + 511
    28  UIKitCore                           0x00000001110bdd3e -[UIViewController _presentViewController:animated:completion:] + 172
    29  UIKitCore                           0x00000001110bdf9c -[UIViewController presentViewController:animated:completion:] + 150
    30  IoT Simulator                       0x000000010b9568a1 $s13IoT_Simulator11AppDelegateC23setupRootViewControlleryyF + 913
    31  IoT Simulator                       0x000000010b9514dc $s13IoT_Simulator11AppDelegateC11application_29didFinishLaunchingWithOptionsSbSo13UIApplicationC_SDySo0k6LaunchJ3KeyaypGSgtFySbcfU_ + 284
    32  IoT Simulator                       0x000000010b9516e3 $s13IoT_Simulator11AppDelegateC11application_29didFinishLaunchingWithOptionsSbSo13UIApplicationC_SDySo0k6LaunchJ3KeyaypGSgtFySbcfU_TA + 19
    33  IoT Simulator                       0x000000010b958eb8 $s13IoT_Simulator12LoginManagerC5login5retry10completionySb_ySbctFySbcfU_ + 296
    34  IoT Simulator                       0x000000010b958f47 $s13IoT_Simulator12LoginManagerC5login5retry10completionySb_ySbctFySbcfU_TA + 23
    35  IoT Simulator                       0x000000010b95a8e9 $s13IoT_Simulator12LoginManagerC20acquireTokenSilently10completionyySbc_tFySo22ADAuthenticationResultCcfU_ + 3129
    36  IoT Simulator                       0x000000010b95a955 $s13IoT_Simulator12LoginManagerC20acquireTokenSilently10completionyySbc_tFySo22ADAuthenticationResultCcfU_TA + 21
    37  IoT Simulator                       0x000000010b95ae92 $sSo22ADAuthenticationResultCIegg_ABIeyBy_TR + 66
    38  ADAL                                0x000000010bc9953a __70-[ADAuthenticationRequest(AcquireToken) acquireToken:completionBlock:]_block_invoke + 3050
    39  ADAL                                0x000000010bc9a131 __63-[ADAuthenticationRequest(AcquireToken) validatedAcquireToken:]_block_invoke + 113
    40  ADAL                                0x000000010bc9a58f __56-[ADAuthenticationRequest(AcquireToken) getAccessToken:]_block_invoke + 271
    41  ADAL                                0x000000010bc818cf __40-[ADAcquireTokenSilentHandler getToken:]_block_invoke + 799
    42  ADAL                                0x000000010bc84a64 -[ADAcquireTokenSilentHandler getAccessToken:] + 2660
    43  ADAL                                0x000000010bc81572 -[ADAcquireTokenSilentHandler getToken:] + 178
    44  ADAL                                0x000000010bc9a424 -[ADAuthenticationRequest(AcquireToken) getAccessToken:] + 484
    45  ADAL                                0x000000010bc9a03b -[ADAuthenticationRequest(AcquireToken) validatedAcquireToken:] + 331
    46  ADAL                                0x000000010bc99964 __70-[ADAuthenticationRequest(AcquireToken) acquireToken:completionBlock:]_block_invoke.162 + 644
    47  ADAL                                0x000000010bca98ab __74-[ADAuthorityValidation checkAuthority:validateAuthority:completionBlock:]_block_invoke + 299
    48  ADAL                                0x000000010bcaa185 __76-[ADAuthorityValidation validateAADAuthority:requestParams:completionBlock:]_block_invoke_2 + 53
    49  libdispatch.dylib                   0x000000011016bd7f _dispatch_call_block_and_release + 12
    50  libdispatch.dylib                   0x000000011016cdb5 _dispatch_client_callout + 8
    51  libdispatch.dylib                   0x000000011016f7b9 _dispatch_queue_override_invoke + 1022
    52  libdispatch.dylib                   0x000000011017d632 _dispatch_root_queue_drain + 351
    53  libdispatch.dylib                   0x000000011017dfca _dispatch_worker_thread2 + 130
    54  libsystem_pthread.dylib             0x00000001105556b3 _pthread_wqthread + 583
    55  libsystem_pthread.dylib             0x00000001105553fd start_wqthread + 13
)

1 Ответ

0 голосов
/ 03 октября 2019

Попробуйте вызвать setupRootViewController в основном потоке, поскольку большинство обработчиков завершения находятся в фоновом режиме. Потоки

LoginManager.shared.login() { (success) -> Void in
        if success {
            print("Login Successful")
    DispatchQueue.main.async{ 
        self.setupRootViewController()
       }
    } else {
            print("Login Un-Successful")
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...