首页 > 解决方案 > 从 Javascript 调用包装器函数会导致应用程序崩溃 - React-Native

问题描述

您好,我正在尝试在 javascript 中调用我通过 Objective C 导出的函数。当我在 javascript 中调用我的函数时,我的应用程序崩溃了。

RCT_EXPORT_METHOD(getModelAsync:()
                  resolver:(RCTPromiseResolveBlock)resolve
                  rejecter:(RCTPromiseRejectBlock)reject)
{
  NSError *error;
  NSString *contents = [[UIDevice currentDevice] model];

  if (contents) {
    resolve(contents);
  } else {
    reject(@"Test", @"Something is broken",error);
  }
}

它在 if 语句上失败并出现此错误:线程 1:EXC_BAD_ACCESS (code=1, address=0x0)

if (!RCTIsIdentifierHead(**input)) {
  return NO;

欢迎大家帮忙,谢谢!

标签: iosobjective-creact-native

解决方案


我今天遇到了这个问题并设法解决了它。看起来函数参数类型不匹配。当函数类型不兼容时,似乎会触发此错误。类似于以下代码片段的内容会触发此错误,因为字典与字符串类型不兼容,因此无法正确转换函数参数。

模块.m

RCT_EXTERN_METHOD(myFunction: (NSDictionary)options)

模块.swift

@objc
func myFunction(_ options: String) -> Void {
  ...
}

要修复它,请确保您正在执行以下操作:

固定模块.m

RCT_EXTERN_METHOD(myFunction: (NSDictionary)options)

FixedModule.swift

@objc
func myFunction(_ options: NSDictionary) -> Void {
  ...
}

我希望这有帮助!


推荐阅读