2017-08-28 44 views
0

我正在尝试使用我可以在我的JavaScript代码中调用的函数创建本机swift模块。目前我有我的module.swift文件,我的module.m文件和桥接头。React Native Swift模块中的回调函数

这里的MyModule.swift:

import Foundation 

@objc(MyModule) 
class MyModule: NSObject { 

    @objc func callbackMethod(callback: RCTResponseSenderBlock) -> Void { 
    let resultsDict = [ 
    "success" : true 
    ]; 

    callback([NSNull() ,resultsDict]) 
    } 

} 

这里的MyModule.m:

#import <Foundation/Foundation.h> 

// CalendarManagerBridge.m 
#import <React/RCTBridgeModule.h> 
#import <React/RCTEventEmitter.h> 

@interface RCT_EXTERN_MODULE(MyModule, NSObject) 

RCT_EXTERN_METHOD(callbackMethod:(RCTResponseSenderBlock)callback) 

@end 

这里的桥接报:

#import React/RCTBridgeModule.h 

#import React/RCTEventEmitter.h 

最后,这里是我的电话在javascript:

const { MyModule } = require('NativeModules'); 
MyModule.callbackMethod((err,r) => console.log(r)); 

的问题是,每当我运行该项目,它会导致一个错误:

Exception 'callbackMethod:(RCTResponseSenderBlock)callback is not a recognized Objective-c 
method.' 

但是,我找不到任何错误的文档。有人可以提供一些帮助吗?

+0

您使用永葆回调其在这里需要两个参数,你传递一个字典作为第二个参数接受,但作为nsnull第一,为什么?我认为第一个参数是这样的回调中的布尔值,尝试传递true而不是nsnull,第二个RCTResponseSenderBlock是您提供的一个块或一种类型的callBack名称。如果它的一个块是在模块中注册的? –

回答

1

由于某些原因,我们现在需要针对不同方法编写@objc部件。

变化

@objc func callbackMethod(callback: RCTResponseSenderBlock) -> Void { 
let resultsDict = [ 
"success" : true 
]; 

callback([NSNull() ,resultsDict]) 

@objc(callbackMethod:) 
func callbackMethod(callback: RCTResponseSenderBlock) -> Void { 
let resultsDict = [ 
"success" : true 
]; 

callback([NSNull() ,resultsDict])