在登录完成之前,我正在应用程序中显示一个初始视图控制器。登录成功后,我尝试使用AppDelegate类中的以下代码显示我的Main ViewController。它仅正确显示视图控制器,但显示错误。我可能在代码中犯了一些错误。
我希望仅在我在AppDelegate中完成的所有工作完成后才能调用我的Main ViewController viewWillAppear()。
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)
}
}
}
以下是我遇到的错误
登陆成功
2019-10-03 20:49:00.707020 + 0530 IoT模拟器[47491:1653133] [Animation] + [UIView setAnimationsEnabled:]从后台线程中调用。不支持从UIView的后台线程或子类执行任何操作,这可能会导致意外和隐患。跟踪=(
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布局子视图] + 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视图] + 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模拟器0x000000010b9568a1 $ s13IoT_Simulator11AppDelegateC23setupRootViewControlleryyF + 913
31 IoT模拟器0x000000010b9514dc $ s13IoT_Simulator11AppDelegateC11application_29didFinishLaunchingWithOptionsSbSo13UIApplicationC_SDySo0k6LaunchJ3KeyaypGSgtFySbcfU_ + 284
32 IoT模拟器0x000000010b9516e3 $ s13IoT_Simulator11AppDelegateC11application_29didFinishLaunchingWithOptionsSbSo13UIApplicationC_SDySo0k6LaunchJ3KeyaypGSgtFySbcfU_TA + 19
33 IoT模拟器0x000000010b958eb8 $ s13IoT_Simulator12LoginManagerC5login5retry10completionySb_ySbctFySbcfU_ + 296
34 IoT模拟器0x000000010b958f47 $ s13IoT_Simulator12LoginManagerC5login5retry10completionySb_ySbctFySbcfU_TA + 23
35 IoT模拟器0x000000010b95a8e9 $ s13IoT_Simulator12LoginManagerC20acquireTokenSilently10completionyySbc_tFySo22ADAuthenticationResultCcfU_ + 3129
36 IoT模拟器0x000000010b95a955 $ s13IoT_Simulator12LoginManagerC20acquireTokenSilently10completionyySbc_tFySo22ADAuthenticationResultCcfU_TA + 21
37 IoT模拟器0x000000010b95ae92 $ sSo22ADAuthenticationResultCIegg_ABIeyBy_TR + 66
38 ADAL 0x000000010bc9953a __70- [ADAuthenticationRequest(AcquireToken)acquisitionToken: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)acquisitionToken: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
)
最佳答案
尝试在主线程上调用setupRootViewController,因为大多数完成处理程序都在后台线程上
LoginManager.shared.login() { (success) -> Void in
if success {
print("Login Successful")
DispatchQueue.main.async{
self.setupRootViewController()
}
} else {
print("Login Un-Successful")
}
}