我正在将一个Objective-c库连接到React。为了返回我需要的数据,我必须使用回调。唯一的问题是,启动生成数据的进程的本机方法(这是我从我的React js文件中调用的方法)不是返回数据的方法。事实上,在我调用的那个和最终结果之间有很多方法。
所以我有几个选择。要么完全重写整个objective-c程序(f * ck那个),要把回调函数作为参数传递给每个方法,最后传递到最终的方法,它将被使用(这个'有效但很丑),或者这篇文章的第三个选项。
我是Objective-c的新手(非常新)所以对我很轻松。
我没有将回调函数传递给每一个方法,而是试图让它成为'全局'。我这样做的尝试看起来像是
@property(nonatomic,copy)RCTResponseSenderBlock globalCallback;
以及'初始化'的方法(这也是我从js调用的方法)
RCT_EXPORT_METHOD(startScan:(RCTResponseSenderBlock)callback) {
self.globalCallback = callback;
...
}
现在只是为了测试这是否有效,我在我初始化'我的globalCallback:
的行的正下方添加了一行代码RCT_EXPORT_METHOD(startScan:(RCTResponseSenderBlock)callback) {
self.globalCallback = callback;
self.globalCallback(@[[NSNull null], @"Test string"]);
...
}
它的确有效(据我所知)。回调将“Test String”返回给React,我能够看到它。所以我转到了我实际想要从中返回信息并向其添加相同代码行的方法(显然从上面的示例中删除了一行):
-(void)theMethodIWantToReturnFrom {
self.globalCallback(@[[NSNull null], @"Test string"]);
...
}
然而,这次它不起作用。我得到 EXC_BAD_ACCESS 。据我所知,这可能意味着我的globalCallback已被解除分配。但不管它意味着什么,我还没有找到解决方案。有关此错误的任何想法/解释?