Сбой приложения при установке заголовка в контроллере представления - PullRequest
1 голос
/ 08 марта 2019

Я использую LGSideMenuController для бокового меню.Все работает нормально.

Но когда я установил title из viewController, мое приложение зависало.Без заголовка все работает нормально.

У меня есть следующий код, который доступен в 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)
    }
}

Я настроил LGSideMenuController, используя раскадровку следующим образом:

Storyboard

Я пытаюсь использовать следующий код в DashboardViewController (DashboardVC), который приводит к сбою моегоapp:

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, но оно не работает для меня.

Ответы [ 3 ]

2 голосов
/ 08 марта 2019

К сожалению, похоже, что проблема в другом месте, и это может быть трудно отследить.

Судя по опубликованной вами ошибке, кажется, что где-то введен неправильный тип. -[__NSCFNumber renderingMode]: unrecognized selector sent to instance говорит, что в основном означает, что существует NSNumber, где должен быть какой-то другой тип объекта, и система пытается вызвать метод renderingMode, который не существует для этого типа.

Это происходит в основном в части Objective-C, и некоторые фреймворки все еще используют Objective-C для внутреннего использования. Проще всего вводить неправильные типы через массивы или словари. А с остальной части вашего стека хорошим началом может быть поиск приписанной строки. В конце вы можете видеть, как вызывается метка, и следует строка NSAttributedString.

Приписанная строка не будет проверять типы при получении атрибутов, поэтому очень легко заставить ее аварийно завершить работу таким образом. Пожалуйста, проверьте свой код на наличие всего, что может работать с NSAttributedString, и закомментируйте атрибуты, чтобы увидеть, исправляет ли это ваш сбой. Если это так, то просто исправьте атрибуты, в том, что вы ввели, должна быть какая-то ошибка.

Если это не так, это может быть ошибка в другой системе, использующей NSAttributedString. Может быть, какая-то библиотека или открытый исходный код, который вам не следует использовать?

Или, возможно, даже внешний вид может вызвать ту же проблему. Вы устанавливаете атрибуты внешнего вида где-то в своем коде для панели навигации?

0 голосов
/ 08 марта 2019

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];

в примере добавлены контроллерыс навигационным контроллером.

0 голосов
/ 08 марта 2019

если вы непосредственно представляете ViewController, а не NavigationController, заголовок будет нулевым.Попробуйте это:

self.navigationItem.title = "Dashboard"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...