【问题标题】:IPhone SendDelegateMessage failed to return after waiting 10 SecsiPhone 发送代表消息等待 10 秒后返回失败
【发布时间】:2009-10-24 18:41:47
【问题描述】:

在尝试将大型 NSData 对象转换为 base64Encoding 以进行 http 传输时,我不断从 iPhone 3.0 收到以下消息:

void SendDelegateMessage(NSInvocation*): delegate failed to return after waiting 10 seconds. main run loop mode: kCFRunLoopDefaultMode

如果您在整个时间间隔内都没有使用触摸屏(这可能会延长等待时间),请提交错误。

我正在使用同步请求,并且在上传数据时触摸屏将被冻结,只有 UIProgressView 显示状态。 任何人都知道如何解决这个问题?

【问题讨论】:

  • 如果您有同步请求,当 Web 视图尝试调用您的委托时,它不会响应。我很确定这就是这条信息。
  • 否 - 这意味着:我调用了一个委托,它花费的时间太长,我无法继续显示 HTML 或运行 JS

标签: iphone objective-c deadlock


【解决方案1】:

正如它所说:你花了太长时间;D
网页视图改成英文:“我打电话给委托人,时间太长,我无法继续显示 HTML 或运行 JS”

不要屏蔽网页视图,否则它会在一段时间后抱怨...

所以做一个同步请求?在主线程上?永远不要这样做

更好的方法:

- webView:... {
      dispatch_async(dispatch_get_global_queue(0,0), ^{
          //DO LONG RUNNING IN BG

          dispatch_sync(dispatch_get_main_queue(), ^{
              //update UI
          }
      }
}

【讨论】:

    【解决方案2】:

    如果您使用的是UIWebView,那么我们需要先执行此操作,然后再转到下一个视图

    webView.delegate = nil;
    

    【讨论】:

    • 你是对的,但这远不是这个问题的答案。这很好地防止了错误的访问
    猜你喜欢
    • 2011-06-06
    • 1970-01-01
    • 1970-01-01
    • 2018-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    • 2019-12-25
    相关资源
    最近更新 更多