"'undefined'不是React Native中Native Module的"对象"

Ada*_*ski 5 objective-c ios react-native

尝试在本机模块中调用方法时出现以下错误:

'undefined' is not an object (evaluating 'ScaleController. updateScaleFromJSON')

我的原生模块Objective-C文件 -

RCTScaleController.h:

#ifndef RCTScaleController_h
#define RCTScaleController_h

#import "RCTBridgeModule.h"

@interface RCTScaleController : NSObject <RCTBridgeModule>
@end

#endif /* RCTScaleController_h */
Run Code Online (Sandbox Code Playgroud)

RCTScaleController.mm:

#import "RCTScaleController.h"
#import "ScaleControllerObjC.h"
#import "RCTLog.h"

@implementation RCTScaleController

RCT_EXPORT_MODULE();

RCT_EXPORT_METHOD(updateScaleFromJSON:(NSString *)jsonString)
{
    RCTLogInfo(@"About to send json: %@", jsonString);
    ScaleControllerObjC *scaleController = [[ScaleControllerObjC alloc] init];
    [scaleController updateScaleFromJSON:jsonString];
}
Run Code Online (Sandbox Code Playgroud)

在我的JS文件中需要它:

var ScaleController = require('react-native').NativeModules.RCTScaleController;
Run Code Online (Sandbox Code Playgroud)

在这里它被调用导致错误:

ScaleController.updateScaleFromJSON (JSON.stringify (scale));
Run Code Online (Sandbox Code Playgroud)

我按照我见过的例子,不知道这里有什么问题.

And*_*dru 15

通常,如果一个模块带有前缀RCT,在NativeModules中它只是它之后的子串,所以你不必重命名你的整个模块,只需要用不同的方式调用它NativeModules.

例:

因此,例如在Android的情况下,如果您的getName()函数确实返回了类似"RCTMyName"的名称:

@Override
public String getName() {
    return "RCTMyName";
}
Run Code Online (Sandbox Code Playgroud)

然后回到Javascript中,你必须在没有 它的情况下调用它RCT,即只需MyName:

import { NativeModules } from 'react-native';
export default NativeModules.MyName;
Run Code Online (Sandbox Code Playgroud)