问题描述
我在我的应用程序中显示初始视图控制器,直到登录完成.登录成功后,我尝试使用 AppDelegate 类中的以下代码显示我的主 ViewController.它仅正确显示视图控制器,但显示错误.我可能在代码中犯了一些错误.
我希望我的 Main ViewController viewWillAppear() 仅在我在 AppDelegate 中所做的所有工作完成后才被调用.
AppDelegate 类
class AppDelegate: UIResponder, UIApplicationDelegate {变量窗口:UIWindow?func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) ->布尔{//在应用程序启动后覆盖自定义点.打印(内部应用程序委托")self.window = UIWindow(frame: UIScreen.main.bounds)self.initializeAppViewState()LoginManager.shared.login() {(成功)->作废如果成功{print("登录成功")self.setupRootViewController()} 别的 {print("登录失败")}}返回真}func applicationWillResignActive(_ application: UIApplication) {}func applicationDidEnterBackground(_ application: UIApplication) {}func applicationWillEnterForeground(_ application: UIApplication) {}func applicationDidBecomeActive(_ application: UIApplication) {}func applicationWillTerminate(_ application: UIApplication) {}func initializeAppViewState() {如果(!Thread.isMainThread){DispatchQueue.main.async {self.initializeAppViewState()}返回}self.window!.rootViewController = InitialViewController(nibName: "InitialViewController", bundle: Bundle.main)self.window!.makeKeyAndVisible()}func setupRootViewController() {让 storyboard = UIStoryboard(name: "Main", bundle: nil)让 viewController = storyboard.instantiateViewController(withIdentifier :"NavigationController") 作为!导航控制器如果让 window = self.window,让 rootViewController = window.rootViewController {var currentController = rootViewController而让presentedController = currentController.presentedViewController {currentController =presentedController}currentController.present(viewController,动画:true,完成:nil)}}}
下面是我得到的错误
登陆成功2019-10-03 20:49:00.707020+0530 IoT Simulator[47491:1653133] [Animation] +[UIView setAnimationsEnabled:] 从后台线程调用.不支持从 UIView 或子类的后台线程执行任何操作,并且可能会导致意外和阴险的行为.痕迹=(0 UIKitCore 0x0000000111b7bdda kFixedAnimationDuration_block_invoke_5 + 1071 libdispatch.dylib 0x000000011016cdb5 _dispatch_client_callout + 82 libdispatch.dylib 0x000000011016e83c _dispatch_once_callout + 663 UIKitCore 0x0000000111b7bd6d +[UIView(Animation) setAnimationsEnabled:] + 764 UIKitCore 0x0000000111b7bebb +[UIView(Animation) performWithoutAnimation:] + 845 UIKitCore 0x0000000110e06d46 -[UIVisualEffectView _updateSubviews] + 3256 UIKitCore 0x0000000110e07b56 -[UIVisualEffectView _configureAllEffects] + 14357 UIKitCore 0x0000000110e05fe5 -[UIVisualEffectView setBackgroundEffects:] + 3968 UIKitCore 0x0000000110e100ee -[_UIBarBackground updateBackground] + 2299 UIKitCore 0x0000000110e1039d -[_UIBarBackground transitionBackgroundViews] + 20810 UIKitCore 0x0000000110e99bde -[_UINavigationBarVisualProviderModernIOS _updateBackgrounds] + 85011 UIKitCore 0x0000000110e99e20 -[_UINavigationBarVisualProviderModernIOS layoutSubviews] + 27212 UIKitCore 0x0000000110e4ee4c -[UINavigationBar layoutSubviews] + 25613 UIKitCore 0x0000000111b89e69 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 141714 UIKitCore 0x0000000110e4eba4 -[UINavigationBar layoutSublayersOfLayer:] + 24815 QuartzCore 0x000000011310cd22 -[CALayer layoutSublayers] + 17316 QuartzCore 0x00000001131119fc _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 39617 UIKitCore 0x0000000111b74e2d -[UIView(Hierarchy) layoutBelowIfNeeded] + 64618 UIKitCore 0x0000000110ffa271 -[UINavigationController _positionNavigationBarHidden:edge:initialOffset:] + 80019 UIKitCore 0x0000000110ffa4f0 -[UINavigationController _positionNavigationBarHidden:edge:] + 38820 UIKitCore 0x000000011100149d -[UINavigationController loadView] + 23921 UIKitCore 0x00000001110a7d04 -[UIViewController loadViewIfRequired] + 17222 UIKitCore 0x00000001110a8524 -[UIViewController 视图] + 2723 UIKitCore 0x0000000110fcf5b4 -[_UIFullscreenPresentationController _setPresentedViewController:] + 8924 UIKitCore 0x0000000110fc36aa -[UIPresentationController initWithPresentedViewController:presentingViewController:] + 13325 UIKitCore 0x00000001110bb18a -[UIViewController _presentViewController:withAnimationController:completion:] + 370026 UIKitCore 0x00000001110bddd7 __63-[UIViewController _presentViewController:animated:completion:]_block_invoke + 9827 UIKitCore 0x00000001110be2ef -[UIViewController _performCoordinatedPresentOrDismiss:animated:] + 51128 UIKitCore 0x00000001110bdd3e -[UIViewController _presentViewController:animated:completion:] + 17229 UIKitCore 0x00000001110bdf9c -[UIViewController presentViewController:animated:completion:] + 15030 物联网模拟器 0x000000010b9568a1 $s13IoT_Simulator11AppDelegateC23setupRootViewControlleryyF + 91331 物联网模拟器 0x000000010b9514dc $s13IoT_Simulator11AppDelegateC11application_29didFinishLaunchingWithOptionsSbSo13UIApplicationC_SDySo0k6LaunchJ3KeyaypGSgtFySbcfU_ + 28432 物联网模拟器 0x000000010b9516e3 $s13IoT_Simulator11AppDelegateC11application_29didFinishLaunchingWithOptionsSbSo13UIApplicationC_SDySo0k6LaunchJ3KeyaypGSgtFySbcfU_TA + 1933 物联网模拟器 0x000000010b958eb8 $s13IoT_Simulator12LoginManagerC5login5retry10completionySb_ySbctFySbcfU_ + 29634 物联网模拟器 0x000000010b958f47 $s13IoT_Simulator12LoginManagerC5login5retry10completionySb_ySbctFySbcfU_TA + 2335 物联网模拟器 0x000000010b95a8e9 $s13IoT_Simulator12LoginManagerC20acquireTokenSilently10completionyySbc_tFySo22ADAuthenticationResultCcfU_ + 312936 物联网模拟器 0x000000010b95a955 $s13IoT_Simulator12LoginManagerC20acquireTokenSilently10completionyySbc_tFySo22ADAuthenticationResultCcfU_TA + 2137 物联网模拟器 0x000000010b95ae92 $sSo22ADAuthenticationResultCIegg_ABIeyBy_TR + 6638 ADAL 0x000000010bc9953a __70-[ADAuthenticationRequest(AcquireToken)acquireToken:completionBlock:]_block_invoke + 305039 ADAL 0x000000010bc9a131 __63-[ADAuthenticationRequest(AcquireToken)validatedAcquireToken:]_block_invoke + 11340 ADAL 0x000000010bc9a58f __56-[ADAuthenticationRequest(AcquireToken) getAccessToken:]_block_invoke + 27141 ADAL 0x000000010bc818cf __40-[ADAcquireTokenSilentHandler getToken:]_block_invoke + 79942 ADAL 0x000000010bc84a64 -[ADAcquireTokenSilentHandler getAccessToken:] + 266043 ADAL 0x000000010bc81572 -[ADAcquireTokenSilentHandler getToken:] + 17844 ADAL 0x000000010bc9a424 -[ADAuthenticationRequest(AcquireToken) getAccessToken:] + 48445 ADAL 0x000000010bc9a03b -[ADAuthenticationRequest(AcquireToken)validatedAcquireToken:] + 33146 ADAL 0x000000010bc99964 __70-[ADAuthenticationRequest(AcquireToken)acquireToken:completionBlock:]_block_invoke.162 + 64447 ADAL 0x000000010bca98ab __74-[ADAuthorityValidation checkAuthority:validateAuthority:completionBlock:]_block_invoke + 29948 ADAL 0x000000010bcaa185 __76-[ADAuthorityValidation validateAADAuthority:requestParams:completionBlock:]_block_invoke_2 + 5349 libdispatch.dylib 0x000000011016bd7f _dispatch_call_block_and_release + 1250 libdispatch.dylib 0x000000011016cdb5 _dispatch_client_callout + 851 libdispatch.dylib 0x000000011016f7b9 _dispatch_queue_override_invoke + 102252 libdispatch.dylib 0x000000011017d632_dispatch_root_queue_drain + 35153 libdispatch.dylib 0x000000011017dfca _dispatch_worker_thread2 + 13054 libsystem_pthread.dylib 0x00000001105556b3 _pthread_wqthread + 58355 libsystem_pthread.dylib 0x00000001105553fd start_wqthread + 13)尝试在主线程上调用 setupRootViewController,因为大多数完成处理程序都在后台线程上
LoginManager.shared.login() {(成功)->作废如果成功{print("登录成功")DispatchQueue.main.async{self.setupRootViewController()}} 别的 {print("登录失败")}}
I am showing an initial view controller in my app until login completes. Once login is successful I'm trying to show my Main ViewController using below code in AppDelegate class. It is showing up view controllers properly only but it is showing an error. I might be making some mistake in my code.
I want my Main ViewController viewWillAppear() to be called only after all the work that I'm doing in AppDelegate gets completed.
AppDelegate Class
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)
}
}
}
Below is the error I'm getting
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 )
Try calling setupRootViewController on main thread because most completion handlers are on background Threads
LoginManager.shared.login() { (success) -> Void in
if success {
print("Login Successful")
DispatchQueue.main.async{
self.setupRootViewController()
}
} else {
print("Login Un-Successful")
}
}
这篇关于从后台线程调用动画 +UIView setAnimationsEnabled 错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!