Я преобразовал приложение из Objective- C в Swift 5.1. Последним шагом было преобразование AppDelegate. Приложение работало отлично, пока я не преобразовал AppDelegate. После преобразования КАЖДЫЙ переход вызывает сбой с:
"[__ SwiftValue set]: нераспознанный селектор, отправленный экземпляру"
У меня есть семь вкладок. Каждая вкладка работает отлично, пока я не переключусь на другой контроллер представления ИЛИ если я выберу ... Подробнее. Я полностью сбит с толку. Я установил каждую точку останова, которую могу придумать. Например, когда я готовлюсь к переходу на одном из контроллеров, кажется, что все переменные установлены правильно, но как только функция завершается, приложение вылетает перед загрузкой следующего контроллера представления. Точка останова всегда является оператором класса AppDelegate в AppDelegate.
Что происходит? Когда я снова переключаюсь на использование версии AppDelegate для Objective- C, все хорошо. Я предполагаю, что что-то освобождается или разыменовывается, что я не могу обнаружить. Вот код вокруг UITabbarController в AppDelegate:
let tc: UITabBarController? = window?.rootViewController as? UITabBarController
var items: [UIViewController]? = tc?.viewControllers
//set tab titles...
var i: Int = 0
for nav in items ?? [] {
guard let nav = nav as? UINavigationController else {
continue
}
let vc: UIViewController? = nav.viewControllers.first
i += 1
switch i {
case 1:
vc?.title = NSLocalizedString(Globals.kBD_Everyday, comment: "Title for first tab")
case 2:
vc?.title = NSLocalizedString(Globals.kBD_People, comment: "Title for second tab")
case 3:
vc?.title = NSLocalizedString(Globals.kBD_Places, comment: "Title for third tab")
case 4:
vc?.title = NSLocalizedString(Globals.kBD_Tracks, comment: "Title for fourth tab")
case 5:
vc?.title = NSLocalizedString(Globals.kBD_Songs, comment: "Title for fifth tab")
case 6:
vc?.title = NSLocalizedString(Globals.kBD_Instruments, comment: "Title for sixth tab")
case 7:
vc?.title = NSLocalizedString(Globals.kBD_Sources, comment: "Title for last tab")
default:
break
}
}
if Globals.my_IS_TEST != 0 {
//log application document directory
print("Version \(appVersionString ?? ""), Build: \(appBuildString ?? "")")
print("\(AppDelegate.applicationDocumentsDirectory()!)")
print("plist at \(plist)")
} else {
//remove data load
items?.removeLast()
tc?.viewControllers = items
}
//firstObject is a nav controller
let tabView = tc?.viewControllers?.first as! UINavigationController
cvc = tabView.viewControllers.first as? ContainerViewController
cvc?.isThisDay = true
Это выходные данные отладчика: 2020-02-04 18: 23: 22.118721-0500 Fab4Everyday [78607: 10435517] - [__ SwiftValue set]: не распознан селектор отправлен в экземпляр 0x604000110c10 2020-02-04 18: 23: 22.125943-0500 Fab4Everyday [78607: 10435517] * Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина: '- [__ SwiftValue set]: нераспознанный селектор отправлен в экземпляр 0x604000110c10 '* стек вызовов первого выброса: (
0 CoreFoundation 0x000000010680627e __exceptionPreprocess + 350
1 libobjc.A.dylib 0x0000000106673b20 objc_exception_throw + 48
2 CoreFoundation 0x0000000106826fd4 -[NSObject(NSObject) doesNotRecognizeSelector:] + 132
3 CoreFoundation 0x000000010680ac4c ___forwarding___ + 1436
4 CoreFoundation 0x000000010680cf78 _CF_forwarding_prep_0 + 120
5 UIFoundation 0x000000011b0cdf37 -[NSCoreTypesetter _NSFastDrawString:length:attributes:paragraphStyle:typesetterBehavior:lineBreakMode:rect:padding:graphicsContext:baselineRendering:usesFontLeading:usesScreenFont:scrollable:syncAlignment:mirrored:boundingRectPointer:baselineOffsetPointer:wantsTextLineFragments:drawingContext:] + 2621
6 UIFoundation 0x000000011b0cf388 -[NSCoreTypesetter _stringDrawingCoreTextEngineWithOriginalString:rect:padding:graphicsContext:forceClipping:attributes:stringDrawingOptions:drawingContext:wantsTextLineFragments:validatedAttributedString:firstNonRenderedCharacterIndex:foundSoftHyphenAtEOL:enginePathUsed:] + 1142
7 UIFoundation 0x000000011b0c9a67 __NSStringDrawingEngine + 5999
8 UIFoundation 0x000000011b0c64bf _NSStringDrawingCore + 173
9 UIFoundation 0x000000011b0cac82 -[NSAttributedString(NSExtendedStringDrawing) drawWithRect:options:context:] + 456
10 UIKitCore 0x00000001197b3ea4 -[UILabel _drawTextInRect:baselineCalculationOnly:] + 3783
11 UIKitCore 0x00000001197b0dc8 -[UILabel drawTextInRect:] + 1051
12 UIKitCore 0x00000001197b4169 -[UILabel drawRect:] + 71
13 UIKitCore 0x00000001198656f3 -[UIView(CALayerDelegate) drawLayer:inContext:] + 632
14 QuartzCore 0x0000000104fbb6bf -[CALayer drawInContext:] + 285
15 QuartzCore 0x0000000104e85743 CABackingStoreUpdate_ + 190
16 QuartzCore 0x0000000104fc40e9 ___ZN2CA5Layer8display_Ev_block_invoke + 53
17 QuartzCore 0x0000000104fbb042 -[CALayer _display] + 2022
18 QuartzCore 0x0000000104fcda80 _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 502
19 QuartzCore 0x0000000104f14848 _ZN2CA7Context18commit_transactionEPNS_11TransactionEd + 324
20 QuartzCore 0x0000000104f49b51 _ZN2CA11Transaction6commitEv + 643
21 UIKitCore 0x000000011937a3f4 _UIApplicationFlushRunLoopCATransactionIfTooLate + 104
22 UIKitCore 0x000000011941d57a __handleEventQueueInternal + 6902
23 CoreFoundation 0x0000000106769471 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
24 CoreFoundation 0x000000010676939c __CFRunLoopDoSource0 + 76
25 CoreFoundation 0x0000000106768b74 __CFRunLoopDoSources0 + 180
26 CoreFoundation 0x000000010676387f __CFRunLoopRun + 1263
27 CoreFoundation 0x0000000106763066 CFRunLoopRunSpecific + 438
28 GraphicsServices 0x000000010ac59bb0 GSEventRunModal + 65
29 UIKitCore 0x0000000119380d4d UIApplicationMain + 1621
30 Fab4Everyday 0x00000001026efb3b main + 75
31 libdyld.dylib 0x000000010c2e7c25 start + 1
32 ??? 0x0000000000000001 0x0 + 1
) libc ++ abi.dylib: завершается с необработанным исключением типа NSException