我正在尝试在React Native和Objective C之间编写一个连接以集成本机视图。
这通常在此时有效,但是还有最后一步,我无法执行-将生成的代码传回React Native。我有以下代码:
RCT_EXPORT_MODULE()
RCT_EXPORT_METHOD(generateCode: (RCTResponseSenderBlock)callback) {
dispatch_async(dispatch_get_main_queue(), ^{
[PayPalMobile initializeWithClientIdsForEnvironments:@{PayPalEnvironmentProduction : @"",
PayPalEnvironmentSandbox : @""}];
[self initzero];
[self initone];
[self getUserAuthorizationForProfileSharing];
});
callback(@[[NSNull null], self.code]);
}
最终,getUserAuthorizationForProfileSharing进入此功能:
- (void)sendProfileSharingAuthorizationToServer:(NSDictionary *)authorization {
NSDictionary *response = [authorization objectForKey:@"response"];
NSString *code = [response objectForKey:@"code"];
self.code = code;
}
这也可以正常设置代码。
据我所知,这都是异步的。我想知道我将使用哪种方法仅在获得对象的代码属性设置后才发出回调。
有什么好方法吗?
编辑:这是堆栈跟踪:
2020-05-18 12:24:29.930 [info][tid:com.facebook.react.JavaScript] NATIVE EXCEPTION
2020-05-18 12:24:29.930 [info][tid:com.facebook.react.JavaScript] *** -[__NSPlaceholderArray initWithObjects:count:]: attempt to insert nil object from objects[1]
(
"4 libc++abi.dylib 0x00007fff50256e97 _ZSt11__terminatePFvvE + 8",
"5 libc++abi.dylib 0x00007fff50256e39 _ZSt9terminatev + 41",
"6 libdispatch.dylib 0x000000010c12cd5c _dispatch_client_callout + 28",
"7 libdispatch.dylib 0x000000010c13ade6 _dispatch_main_queue_callback_4CF + 1500",
"8 CoreFoundation 0x00007fff23bd4049 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 9"
)
我假设self.code
是nil
...从上下文看不清楚它的含义,但是如果需要它应该使用一些默认值,如果是可选的则不使用它在数组中]
因此,解决方案可以是
callback(@[[NSNull null], self.code ?: @""]);
或
callback([NSArray arrayWithObjects:[NSNull null], self.code, nil]);