Ошибка React-Native: [__NSPlaceholderDictionary initWithObjects:forKeys:count:]: попытка вставить нулевой объект из объектов [0]’

#ios #react-native #react-native-ios

#iOS #реагировать-родной #реагировать-родной-ios

Вопрос:

Я сталкиваюсь с ошибкой, возникающей при попытке передать данные в метод Obj-C.

Код, как показано, Obj-C:

 RCT_EXPORT_METHOD(connect:(NSDictionary *) params) { 
    _connection = [_phone connect:params delegate:self]; 
}
  

js:

 Twilio.connect({To: ' 447842111281'});
  

Проблема связана с обработкой NSDictionary, однако я не вижу проблемы с данными. Любые идеи будут оценены.

Трассировка стека выглядит следующим образом:

 Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[0]'
*** First throw call stack:
(
    0   CoreFoundation                      0x000000010d94f34b __exceptionPreprocess   171
    1   libobjc.A.dylib                     0x000000010c4f921e objc_exception_throw   48
    2   CoreFoundation                      0x000000010d865d8f -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]   351
    3   CoreFoundation                      0x000000010d865bfb  [NSDictionary dictionaryWithObjects:forKeys:count:]   59
    4   reactNativeRogChapTwilio            0x000000010b783107 -[TCConnectionInternal provideStats]   1384
    5   reactNativeRogChapTwilio            0x000000010b79fdb9 __21-[TCRTCMonitor start]_block_invoke   70
    6   libdispatch.dylib                   0x00000001118e40cd _dispatch_client_callout   8
    7   libdispatch.dylib                   0x00000001118c01c3 _dispatch_continuation_pop   1091
    8   libdispatch.dylib                   0x00000001118d51e2 _dispatch_source_latch_and_call   195
    9   libdispatch.dylib                   0x00000001118cdd7d _dispatch_source_invoke   1098
    10  libdispatch.dylib                   0x00000001118c4b2e _dispatch_main_queue_callback_4CF   1006
    11  CoreFoundation                      0x000000010d9134f9 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__   9
    12  CoreFoundation                      0x000000010d8d8f8d __CFRunLoopRun   2205
    13  CoreFoundation                      0x000000010d8d8494 CFRunLoopRunSpecific   420
    14  GraphicsServices                    0x00000001132cda6f GSEventRunModal   161
    15  UIKit                               0x000000010ff9df34 UIApplicationMain   159
    16  reactNativeRogChapTwilio            0x000000010b77d2ef main   111
    17  libdyld.dylib                       0x000000011193068d start   1
    18  ???                                 0x0000000000000001 0x0   1
)
libc  abi.dylib: terminating with uncaught exception of type NSException
  

Комментарии:

1. Как указано в сообщении об ошибке, вы пытаетесь установить nil в NSDictionary, что запрещено. Установите точку останова исключения, запустите снова и покажите код, который вызывает сбой.

2. Вкладка точки останова -> кнопка » » в левом нижнем углу -> Добавить точку останова исключения

3. @alex argc и argv оба не равны нулю, а AppDelegate является допустимым классом…

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

5. спасибо @alex, обновили вопрос с кодом.

Ответ №1:

Это может быть или не быть связано с вашей проблемой. Но эта ошибка часто возникает для меня, потому params что данные узла возвращаются без приведенного класса. К чему Objective-C чрезвычайно придирчив.

Например, если я поставлю точку останова, я получу следующее :

 po params[@"callerUserName"]
<extracting data from value failed>
  

Решение, которое я нашел, заключалось в следующем :

 po ((NSString*)params[@"callerUserName"])
  

Очень любопытно, почему это происходит! Потому что для некоторых моих методов данные передаются просто отлично. Но если в моей строке есть только одно целое значение (например, электронное письмо с номером в нем), то Obj-C понятия не имеет, что с собой делать.