ios - 在 View Controller 中设置标题时应用程序崩溃

标签 ios swift navigationcontroller

我正在使用 LGSideMenuController侧边菜单。一切正常。

但是当我设置 viewControllertitle 时,我的应用程序崩溃了。没有标题它工作正常。

我在 didFinishWithLauchingOption 中提供了以下代码来配置导航栏。

if #available(iOS 11.0, *) {
    UINavigationBar.appearance(whenContainedInInstancesOf: [UIDocumentBrowserViewController.self]).tintColor = .menuColor
} else {
    UINavigationBar.appearance(whenContainedInInstancesOf: [UIDocumentPickerViewController.self]).tintColor = .menuColor
}

// Configure Navigation Bar
UINavigationBar.appearance().tintColor = .white
UINavigationBar.appearance().titleTextAttributes = [
    NSAttributedString.Key.foregroundColor : UIColor.menuColor,
    NSAttributedString.Key.font : UIFont.systemFontSize
]

UIColor 扩展

extension UIColor {
    // Menu Background Color
    class var menuColor: UIColor {
        get {
            return UIColor(red: 0, green: 105, blue: 255)
        }
    }

    convenience init(red: Int, green: Int, blue: Int) {
        assert(red >= 0 && red <= 255, "Invalid red component")
        assert(green >= 0 && green <= 255, "Invalid green component")
        assert(blue >= 0 && blue <= 255, "Invalid blue component")

        self.init(red: CGFloat(red) / 255.0, green: CGFloat(green) / 255.0, blue: CGFloat(blue) / 255.0, alpha: 1.0)
    }
}

我已经使用 Storyboard配置了 LGSideMenuController,如下所示:

Storyboard

我正在尝试使用 DashboardViewController (DashboardVC) 中的以下代码,这使我的应用程序崩溃了:

self.title = "Dashboard"

并产生以下错误:

-[__NSCFNumber renderingMode]: unrecognized selector sent to instance 0xd9c845dd03d829d0
2019-03-08 12:50:37.552233+0530 AppName[5924:95152] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber renderingMode]: unrecognized selector sent to instance 0xd9c845dd03d829d0'
*** First throw call stack:
(
0   CoreFoundation                      0x0000000108f711bb __exceptionPreprocess + 331
1   libobjc.A.dylib                     0x0000000108093735 objc_exception_throw + 48
2   CoreFoundation                      0x0000000108f8ff44 -[NSObject(NSObject) doesNotRecognizeSelector:] + 132
3   CoreFoundation                      0x0000000108f75ed6 ___forwarding___ + 1446
4   CoreFoundation                      0x0000000108f77da8 _CF_forwarding_prep_0 + 120
5   UIFoundation                        0x000000010e7154b6 __NSValidateCoreTextAttributes + 1098
6   UIFoundation                        0x000000010e711836 __NSStringDrawingEngine + 2830
7   UIFoundation                        0x000000010e714304 -[NSAttributedString(NSExtendedStringDrawing) boundingRectWithSize:options:context:] + 795
8   UIKitCore                           0x0000000111698a2f -[UILabel _textRectForBounds:limitedToNumberOfLines:includingShadow:] + 583
9   UIKitCore                           0x00000001116985a4 -[UILabel textRectForBounds:limitedToNumberOfLines:] + 50
10  UIKitCore                           0x000000011169d3f3 -[UILabel _intrinsicSizeWithinSize:] + 389
11  UIKitCore                           0x000000011169cb3c -[UILabel _ensureBaselineMetricsReturningBounds] + 197
12  UIKitCore                           0x000000011169ce9d -[UILabel _firstBaselineOffsetFromTop] + 169
13  UIKitCore                           0x00000001116788e5 -[UIView(AdditionalLayoutSupport) nsli_lowerAttribute:intoExpression:withCoefficient:forConstraint:onBehalfOfLayoutGuide:] + 1361
14  UIKitCore                           0x0000000111678385 -[UIView(AdditionalLayoutSupport) nsli_lowerAttribute:intoExpression:withCoefficient:forConstraint:] + 289
15  Foundation                          0x0000000107cb8ed3 -[NSLayoutConstraint _lowerIntoExpression:reportingConstantIsRounded:] + 96
16  Foundation                          0x0000000107cb8a0f -[NSLayoutConstraint _addToEngine:mutuallyExclusiveConstraints:] + 114
17  UIKitCore                           0x0000000111662bc7 -[UIView(UIConstraintBasedLayout) _layoutEngine_didAddLayoutConstraint:roundingAdjustment:mutuallyExclusiveConstraints:] + 447
18  UIKitCore                           0x0000000111663021 -[UIView(UIConstraintBasedLayout) _tryToAddConstraintWithoutUpdatingConstraintsArray:roundingAdjustment:mutuallyExclusiveConstraints:] + 30
19  UIKitCore                           0x00000001116636c4 -[UIView(UIConstraintBasedLayout) nsli_addConstraint:] + 38
20  Foundation                          0x0000000107cbaa92 __55+[NSLayoutConstraint _addOrRemoveConstraints:activate:]_block_invoke + 65
21  Foundation                          0x0000000107ca035a -[NSISEngine withBehaviors:performModifications:] + 110
22  Foundation                          0x0000000107cba96e +[NSLayoutConstraint _addOrRemoveConstraints:activate:] + 403
23  UIKitCore                           0x00000001109ee5e7 -[_UINavigationBarContentViewLayout _keepConstraintsActiveIfNecessary:updateLayout:] + 145
24  UIKitCore                           0x00000001109eec6c -[_UINavigationBarContentViewLayout setTitleView:] + 143
25  UIKitCore                           0x00000001109e7136 -[_UINavigationBarContentView _setupTitleViewAnimated:] + 1197
26  UIKit                               0x0000000129d030e9 -[_UINavigationBarContentViewAccessibility _setupTitleViewAnimated:] + 42
27  UIKitCore                           0x00000001109e8da1 -[_UINavigationBarContentView updateContentAnimated:] + 86
28  UIKitCore                           0x0000000110a1afeb -[_UINavigationBarVisualProviderModernIOS _updateContentForTopItem:backItem:animated:] + 1926
29  UIKitCore                           0x0000000110a1b638 -[_UINavigationBarVisualProviderModernIOS _updateContentForTopItem:backItem:] + 53
30  UIKitCore                           0x0000000110a1e255 -[_UINavigationBarVisualProviderModernIOS traitCollectionDidChange:] + 414
31  UIKitCore                           0x00000001109c7156 -[UINavigationBar traitCollectionDidChange:] + 529
32  UIKitCore                           0x0000000111713a47 -[UIView _wrappedProcessTraitCollectionDidChange:forceNotification:] + 137
33  UIKitCore                           0x0000000111713b54 -[UIView _wrappedProcessTraitCollectionDidChange:forceNotification:] + 406
34  UIKitCore                           0x0000000111713d5a -[UIView _processDidChangeRecursivelyFromOldTraits:toCurrentTraits:forceNotification:] + 129
35  UIKitCore                           0x000000011173e72d -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1337
36  QuartzCore                          0x00000001072f7b19 -[CALayer layoutSublayers] + 175
37  QuartzCore                          0x00000001072fc9d3 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 395
38  QuartzCore                          0x00000001072757ca _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 342
39  QuartzCore                          0x00000001072ac97e _ZN2CA11Transaction6commitEv + 576
40  UIKitCore                           0x000000011126f2d0 __34-[UIApplication _firstCommitBlock]_block_invoke_2 + 139
41  CoreFoundation                      0x0000000108ed662c __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12
42  CoreFoundation                      0x0000000108ed5de0 __CFRunLoopDoBlocks + 336
43  CoreFoundation                      0x0000000108ed0654 __CFRunLoopRun + 1284
44  CoreFoundation                      0x0000000108ecfe11 CFRunLoopRunSpecific + 625
45  GraphicsServices                    0x000000010e3b11dd GSEventRunModal + 62
46  UIKitCore                           0x000000011125481d UIApplicationMain + 140
47  AppName                               0x00000001038ea857 main + 71
48  libdyld.dylib                       0x000000010a527575 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException

即使我也尝试过从 Storyboard设置标题,它也会使应用程序崩溃。

我已经遵循了 SO 上可用的解决方案,但它对我不起作用。

最佳答案

不幸的是,问题似乎出在其他地方,可能很难找到这个问题。

从您发布的错误来看,似乎某处输入了一些不正确的类型。 -[__NSCFNumber renderingMode]: unrecognized selector sent to instance 基本上意味着有一个 NSNumber 应该是一些其他对象类型并且系统正在尝试调用一个方法renderingMode 此类型不存在。

这些事情主要发生在 Objective-C 部分,一些框架仍然在内部使用 Objective-C。通过数组或字典输入错误的类型是最容易的。从堆栈的其余部分开始,搜索属性字符串可能是一个好的开始。您可以在接近尾声时看到正在调用标签,然后是属性字符串 NSAttributedString

属性字符串在接收属性时不会检查类型,因此很容易使其崩溃。请检查您的代码中是否有任何可能与 NSAttributedString 一起使用的内容,并注释掉属性以查看它是否修复了您的崩溃。如果是这种情况,那么只需修复属性,您输入的内容一定有错误。

如果不是这种情况,它仍然可能是另一个使用 NSAttributedString 的系统上的错误。也许您不应该使用某些库或开源软件?

或者甚至外表也可能导致同样的问题。您是否在代码中的某处为导航栏设置了外观属性?

关于ios - 在 View Controller 中设置标题时应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55059897/

相关文章:

ios - 当我的应用程序 (phonegap 3.1) 进入后台时 GPS 关闭

ios - 是否可以单击一个 imageView 并打开一个新的 View Controller?

具有奇怪行为的ios状态栏

ios - SVProgressHUD 用户交互禁用在 Xcode 11 和 iOS 13 上不起作用

iphone - 更改 Collection View 的 UILabel 内幕 header

ios - 从场景加载节点后应用程序卡住

ios - 自定义 PickerView iOS

c# - Monotouch NavigationController 过渡样式

ios - 如何从任何导航堆栈中获取 UIViewController

ios - 将栏按钮项目添加到 View Storyboard 中的导航栏