【问题标题】:What delegate method is called when an ASI-HTTP-Request times out?当 ASI-HTTP-Request 超时时调用什么委托方法?
【发布时间】:2010-07-29 18:04:43
【问题描述】:

我有一个对大文件使用 ASI-HTTP-Request 的应用程序,最近我有一个测试人员注意到他们观察到很长的加载延迟,应该表现为超时。我为请求失败连接了委托方法,但这些似乎没有发生。

我翻阅了他们的文档,但没有看到任何具体内容。

【问题讨论】:

    标签: iphone objective-c timeout asihttprequest


    【解决方案1】:

    ASIHTTPRequest.m 中,查看-checkRequestStatus 方法。

    发生超时时,请求会失败并出现ASIRequestTimedOutError 错误类型:

    [self failWithError:ASIRequestTimedOutError];
    

    所以您应该能够检查委托的-requestFailed: 方法中返回的错误:

    - (void)requestFailed:(ASIHTTPRequest *)request {
        NSLog(@"Error: %@",[[request error] localizedDescription]);
    }
    

    最好通读源代码以大致了解事情的运作方式。文档很棒,但并不总是与源代码同步。

    【讨论】:

    • 谢谢。对 HTTP 本身不太了解...我会问这个...如果我有一个 5MB 的文件,并且我的请求超时设置为 10 秒,并且在 10 秒内它只加载说... 3MB...这是否符合超时条件?
    • 不,在块之间没有数据进入后超时开始。如果下载 3MB 需要 10 秒,然后请求等待,等待,等待,没有更多数据进入......那就是超时计时器开始的时候。所以在那个例子中,从请求开始到超时错误需要 20 秒。
    • 那我该怎么说“好吧,即使有数据进来,这也需要很长的时间”......除了制作我自己的 NSTimer......我能做到,只是想知道如果 ASI 给我一个内置的解决方案。
    • 我看不到任何内置的,但您可以轻松利用ASIHTTPRequest 中的现有值,而不是创建自己的NSTimer 实例,不断对secondsSinceLastActivity 属性求和以生成一个自定义overallActivityTime 属性。在-checkRequestStatus 中,如果overallActivityTime 高于某个预设阈值,您可能会因自己的自定义错误而失败。
    猜你喜欢
    • 2011-06-03
    • 1970-01-01
    • 2012-07-13
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多