如何从块函数中获取数据?
How to get data from the block function?
我从 WKWebView 触发一个 js,并在块函数中得到结果。在块函数中,我得到了正确的数据。但是,当我把这个数据赋值给外面的外部变量时,总是得到nil值。
- (id)triggerJS:(NSString*)js
{
NSLog(@"JS = %@",js);
__block id resultJS = nil;
[self.webView evaluateJavaScript:js completionHandler: ^(id data, NSError* err) {
resultJS = [data copy];
}
];
if (resultJS != nil)
{
NSString* str = (NSString*)resultJS;
NSLog(@"Result of JS = %@", str);
}
else
{
NSLog(@"Result of JS = nil");
}
return resultJS;
}
这是为什么?谢谢
那是因为函数evaluateJavaScript
是异步执行的,所以当你执行if (resultJS != nil)
时,“completionHandler
”还没有执行,这就是你总是得到的原因nil
值。
对此的最佳改进是尝试在“completionHandler
”块内重新编写和调整您的代码,这将管理 resultJS 数据。
我从 WKWebView 触发一个 js,并在块函数中得到结果。在块函数中,我得到了正确的数据。但是,当我把这个数据赋值给外面的外部变量时,总是得到nil值。
- (id)triggerJS:(NSString*)js { NSLog(@"JS = %@",js); __block id resultJS = nil; [self.webView evaluateJavaScript:js completionHandler: ^(id data, NSError* err) { resultJS = [data copy]; } ]; if (resultJS != nil) { NSString* str = (NSString*)resultJS; NSLog(@"Result of JS = %@", str); } else { NSLog(@"Result of JS = nil"); } return resultJS; }
这是为什么?谢谢
那是因为函数evaluateJavaScript
是异步执行的,所以当你执行if (resultJS != nil)
时,“completionHandler
”还没有执行,这就是你总是得到的原因nil
值。
对此的最佳改进是尝试在“completionHandler
”块内重新编写和调整您的代码,这将管理 resultJS 数据。