NSInvalidArgumentException — попытка вставить нулевой объект в NSDictionary во время регистрации компонента в React NatiIOS

Программируем под IOS
Ответить
Anonymous
 NSInvalidArgumentException — попытка вставить нулевой объект в NSDictionary во время регистрации компонента в React Nati

Сообщение Anonymous »

Я создаю приложение React Native для iOS и столкнулся с сбоем, связанным с RCTThirdPartyComponentsProvider.mm, при регистрации компонентов. Вот соответствующий фрагмент кода:
dispatch_once(&nativeComponentToken, ^{
thirdPartyComponents = @{
@"RNDateTimePicker": NSClassFromString(@"RNDateTimePickerComponentView"),
@"RNCPicker": NSClassFromString(@"RNCPickerComponentView"),
@"RNMapsGoogleMapView": NSClassFromString(@"RNMapsGoogleMapView"),
@"RNMapsGooglePolygon": NSClassFromString(@"RNMapsGooglePolygonView"),
};
});

Приложение аварийно завершает работу со следующим исключением:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason:
'*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[2]'

Что я проверил:
Проверил, что имена компонентов написаны правильно.
Проверил, правильно ли связаны классы и существуют ли они в базе кода.
Наблюдение:
Из трассировки стека и выделенной строки в Xcode видно, что NSClassFromString возвращает ноль для одного или нескольких компонентов строки.
Вопросы:
Как проверить, какой класс возвращает ноль и вызывает сбой?
Как лучше всего условно регистрировать только доступные компоненты, чтобы избежать этого исключения NSInvalidArgumentException?
Есть ли более безопасный способ регистрации сторонних компонентов в RCTThirdPartyComponentsProvider.mm?
Любой идеи или предложения будут оценены по достоинству. Спасибо!
Среда:
Версия React Native: 0.79.2
Версия Xcode: 16.4
Платформа: iOS
Устройство: iphone 11 pro max (iOS: 18.5)
Изображение

Код файла AppDelegate.swift
import UIKit
import React
import React_RCTAppDelegate
import ReactAppDependencyProvider
import Firebase
import GoogleMaps

@main
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?

var reactNativeDelegate: ReactNativeDelegate?
var reactNativeFactory: RCTReactNativeFactory?

func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil
) -> Bool {
FirebaseApp.configure()
// Initialize Google Maps
GMSServices.provideAPIKey("google_key")

let delegate = ReactNativeDelegate()
let factory = RCTReactNativeFactory(delegate: delegate)
delegate.dependencyProvider = RCTAppDependencyProvider()
reactNativeDelegate = delegate
reactNativeFactory = factory

window = UIWindow(frame: UIScreen.main.bounds)

factory.startReactNative(
withModuleName: "KnotHr",
in: window,
launchOptions: launchOptions
)

return true
}
}

class ReactNativeDelegate: RCTDefaultReactNativeFactoryDelegate {
override func sourceURL(for bridge: RCTBridge) -> URL? {
self.bundleURL()
}

override func bundleURL() -> URL? {
#if DEBUG
RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: "index")
#else
Bundle.main.url(forResource: "main", withExtension: "jsbundle")
#endif
}
}


Подробнее здесь: https://stackoverflow.com/questions/796 ... ary-during
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»