【问题标题】:How to get data from the block function?如何从块函数中获取数据?
【发布时间】:2015-05-29 10:51:36
【问题描述】:

我从 WKWebView 触发一个 js 并在块函数中获取结果。在块函数中,我得到了正确的数据。但是,当我将此数据分配给外部的外部变量时,我总是得到 nil 值。

- (id)triggerJS:(NSString*)js { NSLog(@"JS = %@",js); __block id resultJS = nil; [self.webView evaluateJavaScript:js completionHandler: ^(id data, NSError* err) { resultJS = [数据复制]; } ]; if (resultJS != nil) { NSString* str = (NSString*)resultJS; NSLog(@"JS 的结果 = %@", str); } 别的 { NSLog(@"JS 的结果 = nil"); } 返回结果JS; }

这是为什么呢?谢谢。

【问题讨论】:

    标签: javascript objective-c ios8 wkwebview


    【解决方案1】:

    那是因为函数evaluateJavaScript是异步执行的,所以当你执行if (resultJS != nil)时,“completionHandler”还没有执行,这就是你总是得到nil值的原因。

    对此最好的改进是尝试在“completionHandler”块内重新编写和调整您的代码,这将管理 resultJS 数据。

    【讨论】:

    • 没有办法从那个函数中得到结果吗?无论如何,谢谢。
    • 不,按照您尝试的方式。但是您可以在 completionHandler 块结束时调用函数或发送通知。
    猜你喜欢
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    • 2018-02-19
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 2021-02-09
    相关资源
    最近更新 更多