Ошибка при получении экземпляра AppDelegate в другом UIViewController - PullRequest
0 голосов
/ 24 августа 2018

Здравствуйте. Я вижу журналы сбоев для моего приложения, которые при открытии в XCode выделяют следующую строку

let appDelegate = UIApplication.shared.delegate as! AppDelegate

Я в тупике, поскольку не могу повторить это в XCode.Каковы возможные причины сбоя приложения здесь?

Эта строка находится на viewDidAppear(), а также на viewDidLoad(), но 5 из 5 отчетов о сбоях все указывают на линию на viewDidAppear()

Редактировать:

Вот журнал сбоя

Thread 0 name:
Thread 0 Crashed:
0   MyApp                           0x0000000100531208 LoginViewController.initView() + 536 (LoginViewController.swift:107)
1   MyApp                           0x0000000100530d88 @objc LoginViewController.viewDidAppear(_:) + 112 (LoginViewController.swift:58)
2   UIKit                           0x000000018ee2973c -[UIViewController _setViewAppearState:isAnimating:] + 840 (UIViewController.m:4471)
3   UIKit                           0x000000018f07a448 __64-[UIViewController viewDidMoveToWindow:shouldAppearOrDisappear:]_block_invoke + 44 (UIViewController.m:5055)
4   UIKit                           0x000000018ee7f798 -[UIViewController _executeAfterAppearanceBlock] + 92 (UIViewController.m:4793)
5   UIKit                           0x000000018f185990 _runAfterCACommitDeferredBlocks + 564 (UIApplication.m:2528)
6   UIKit                           0x000000018f17b958 _cleanUpAfterCAFlushAndRunDeferredBlocks + 384 (UIApplication.m:2497)
7   UIKit                           0x000000018f18c68c __34-[UIApplication _firstCommitBlock]_block_invoke_2 + 152 (UIApplication.m:9928)
8   CoreFoundation                  0x00000001851372bc __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 20 (CFRunLoop.c:1840)
9   CoreFoundation                  0x0000000185136a7c __CFRunLoopDoBlocks + 264 (CFRunLoop.c:1881)
10  CoreFoundation                  0x00000001851347b0 __CFRunLoopRun + 1224 (CFRunLoop.c:2922)
11  CoreFoundation                  0x0000000185054da8 CFRunLoopRunSpecific + 552 (CFRunLoop.c:3245)
12  GraphicsServices                0x000000018703a020 GSEventRunModal + 100 (GSEvent.c:2245)
13  UIKit                           0x000000018f074758 UIApplicationMain + 236 (UIApplication.m:3965)
14  MyApp                           0x0000000100424f3c main + 56 (BaseViewController.swift:19)
15  libdyld.dylib                   0x0000000184ae5fc0 start + 4

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Я наконец понял это.Все журналы сбоев указывают на эту строку

let appDelegate = UIApplication.shared.delegate as! AppDelegate

, которая является строкой 107 от моего LoginViewController, но фактическая ошибка фактически вызвана строкой кода двумя строками ранее (ошибка, связанная с данными).Не знаю, почему все журналы указывают на строку 107, хотя.Спасибо за вашу помощь.

0 голосов
/ 24 августа 2018

Я обнаружил, что этот делегат является необязательным значением.

неизвестный (небезопасный) делегат open var: UIApplicationDelegate?

Так что вы должны использовать его следующим образом.

if let appDelegate = UIApplication.shared.delegate as? AppDelegate {
    // code here
} else {
    // error handle
}
...