在视图控制器中设置标题时应用程序崩溃

问题描述 投票:1回答:3

我正在使用LGSideMenuController作为侧边菜单。一切都很好。

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

我有以下代码,可在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

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

我已经按照SO提供的解决方案,但它对我不起作用。

ios swift navigationcontroller
3个回答
2
投票

不幸的是,看起来问题出在其他地方,可能很难跟踪这个问题。

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

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

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

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

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


0
投票

如果您直接使用NavigationController呈现ViewController,则标题将为零。试试这个:

self.navigationItem.title = "Dashboard"

0
投票

LGSideMenuController作为一个根控制器和两个左右视图控制器。

因此,请验证SideMenuController的根视图控制器是否添加了NavigationController。

Ex:- 

UIViewController *rootViewController = [UIViewController new];
UITableViewController *leftViewController = [UITableViewController new];
UITableViewController *rightViewController = [UITableViewController new];

UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:rootViewController];

LGSideMenuController *sideMenuController = [LGSideMenuController sideMenuControllerWithRootViewController:navigationController
                                                                                       leftViewController:leftViewController
                                                                                      rightViewController:rightViewController];

在添加了导航控制器的示例控制器中。

© www.soinside.com 2019 - 2024. All rights reserved.