从 Javascript 调用包装器函数会导致应用程序崩溃 - React-Native

Posted

技术标签:

【中文标题】从 Javascript 调用包装器函数会导致应用程序崩溃 - React-Native【英文标题】:Calling Wrapper Function From Javascript is Crashing App - React-Native 【发布时间】:2018-08-15 13:58:37 【问题描述】:

您好,我正在尝试在 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;

欢迎大家帮忙,谢谢!

【问题讨论】:

我遇到了类似的问题,你解决了吗? 【参考方案1】:

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

Module.m

RCT_EXTERN_METHOD(myFunction: (NSDictionary)options)

Module.swift

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


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

FixedModule.m

RCT_EXTERN_METHOD(myFunction: (NSDictionary)options)

FixedModule.swift

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


我希望这会有所帮助!

【讨论】:

以上是关于从 Javascript 调用包装器函数会导致应用程序崩溃 - React-Native的主要内容,如果未能解决你的问题,请参考以下文章

从 Bokeh Google Maps 包装器 (fitBounds()) 调用 Javascript 方法

OSX 中 Carbon C 应用程序的异常包装器

React 从包装器组件调用函数

使用格式化参数包装调用 Context.getString 会导致 IllegalFormatConversionException

是否可以使用 Emscripten 从 JavaScript 调用 C++ 函数?

如何可视化 JavaScript 包装器对象?