Приложение вылетает, когда клавиатура имеет номерPad, PhonePad или DecimalPad (iOS 12.2, Xcode 10.2) - PullRequest
0 голосов
/ 22 апреля 2019

Мое приложение неожиданно начало сбой, когда клавиатура имеет тип numberPad или phonePad.Авария происходит в симуляторе и на устройстве одновременно.Я устанавливаю тип клавиатуры с помощью приведенного ниже кода.

self.textFieldMobileNumber.keyboardType = .numberPad

Клавиатура по умолчанию работает нормально.Журнал сбоев не работает

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSSetM addObject:]: object cannot be nil'
*** First throw call stack:
(
    0   CoreFoundation                      0x0000000112d0f6fb __exceptionPreprocess + 331
    1   libobjc.A.dylib                     0x0000000112051ac5 objc_exception_throw + 48
    2   CoreFoundation                      0x0000000112c5dddc _CFThrowFormattedException + 194
    3   CoreFoundation                      0x0000000112c81601 -[__NSSetM addObject:] + 817
    4   UIKitCore                           0x000000011ca49f8f +[UIKeyboardImpl uniqueNumberPadInputModesFromInputModes:forKeyboardType:] + 1257
    5   UIKitCore                           0x000000011ca4998f -[UIKeyboardImpl desirableInputModesWithExtensions:] + 1446
    6   UIKitCore                           0x000000011ca4a0cf -[UIKeyboardImpl recomputeActiveInputModesWithExtensions:] + 54
    7   UIKitCore                           0x000000011ca3b158 -[UIKeyboardImpl setDelegate:force:] + 3343
    8   UIKitCore                           0x000000011ca8db1e -[UIPeripheralHost(UIKitInternal) _reloadInputViewsForResponder:] + 1506
    9   UIKitCore                           0x000000011cc4d417 -[UIResponder(UIResponderInputViewAdditions) reloadInputViews] + 81
    10  UIKitCore                           0x000000011cc4916a -[UIResponder becomeFirstResponder] + 865
    11  UIKitCore                           0x000000011d0d4fb8 -[UIView(Hierarchy) becomeFirstResponder] + 145
    12  UIKitCore                           0x000000011cf269ec -[UITextField becomeFirstResponder] + 237
    13  UIKitCore                           0x000000011cee67a5 -[UITextInteractionAssistant(UITextInteractionAssistant_Internal) setFirstResponderIfNecessary] + 208
    14  UIKitCore                           0x000000011ced3853 -[UITextSelectionInteraction oneFingerTap:] + 3851
    15  UIKitCore                           0x000000011c80714d -[UIGestureRecognizerTarget _sendActionWithGestureRecognizer:] + 57
    16  UIKitCore                           0x000000011c80fc69 _UIGestureRecognizerSendTargetActions + 109
    17  UIKitCore                           0x000000011c80d5ba _UIGestureRecognizerSendActions + 311
    18  UIKitCore                           0x000000011c80c897 -[UIGestureRecognizer _updateGestureWithEvent:buttonEvent:] + 966
    19  UIKitCore                           0x000000011c7fec4e _UIGestureEnvironmentUpdate + 2820
    20  UIKitCore                           0x000000011c7fe108 -[UIGestureEnvironment _deliverEvent:toGestureRecognizers:usingBlock:] + 478
    21  UIKitCore                           0x000000011c7fde96 -[UIGestureEnvironment _updateForEvent:window:] + 200
    22  UIKitCore                           0x000000011cc595bc -[UIWindow sendEvent:] + 4057
    23  UIKitCore                           0x000000011cc37d16 -[UIApplication sendEvent:] + 356
    24  UIKitCore                           0x000000011cd08293 __dispatchPreprocessedEventFromEventQueue + 3232
    25  UIKitCore                           0x000000011cd0abb9 __handleEventQueueInternal + 5911
    26  CoreFoundation                      0x0000000112c76be1 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    27  CoreFoundation                      0x0000000112c76463 __CFRunLoopDoSources0 + 243
    28  CoreFoundation                      0x0000000112c70b1f __CFRunLoopRun + 1231
    29  CoreFoundation                      0x0000000112c70302 CFRunLoopRunSpecific + 626
    30  GraphicsServices                    0x00000001171ab2fe GSEventRunModal + 65
    31  UIKitCore                           0x000000011cc1dba2 UIApplicationMain + 140
    32  IMRide                              0x000000010b39beb8 main + 72
    33  libdyld.dylib                       0x000000011560a541 start + 1
    34  ???                                 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException

Я искал по всему интернету и пробовал много решений со своей стороны, но проблема не устранилась.

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

Когда я устанавливаю клавиатуру по умолчанию.Показывает (ноль) для цифровой клавиатуры, переключение на которое не приводит к сбою, но когда установлено .numberPad, клавиатура начинает падать.

Проверьте изображение ниже для ссылки

enter image description here

1 Ответ

1 голос
/ 22 апреля 2019

Наконец-то я нашел проблему.Я переопределил метод NumberFormatter, который вызвал сбой при отображении клавиатуры numberPad.

Ниже приведен метод, который я переопределяю, который не должен был быть выполнен или выполнен каким-либо другим способом.

extension NumberFormatter {
    open override func string(for obj: Any?) -> String? {
         if condition {
             return <some value based on condition>
         }
         return nil
    }
}

Возвращение ноль вызвало сбой.Также, если вы вернете что-то еще, вместо obj он напечатает то же самое на клавишах клавиатуры.

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