【问题标题】:iOS network operation when app become active应用激活时的 iOS 网络操作
【发布时间】:2012-02-28 07:48:07
【问题描述】:

在我当前的 iOS 应用程序中,当应用程序处于活动状态时,我需要执行多个网络操作(我宁愿一次获取所有内容,而不是在用户单击专用选项卡时查询内容)。我使用的 UIViewController 应该在应用程序进入前台并处理其中的所有网络内容时显示。
这是推荐的方法吗?

我需要发出的请求类似于:

request1
   if result1
      request2
         request3
   else if result2
      request4
         request3

为了避免意大利面条式代码,是否有一个库可以用来启用像这些请求一样的链式请求?我正在使用 ASIHttpRequest,但我没有找到任何好的方法来执行它(即使使用队列)。

【问题讨论】:

    标签: objective-c ios asihttprequest afnetworking


    【解决方案1】:

    这没什么错,假设您的 UIViewController 是某种“加载”。 也许更好的处理方法是创建一个NSObject 子类,并让它处理您的网络操作,因此在ApplicationDidBecomeActive: 中您可以将其关闭,并且仍然可以确保继续使用您的应用程序。

    【讨论】:

    • 您的意思是一个处理网络操作逻辑的单例对象(是否也需要从代码中的其他地方调用它们)?不过这是个好主意。
    • 是的,你可以使用单例来实现它。
    【解决方案2】:

    AFNetworking 0.9 添加了批处理请求的功能。 AFHTTPCLient -enqueueBatchOfHTTPRequestOperationsWithRequests:progressBlock:completionBlock: 将一组操作排入队列;当每个操作完成时,它会像平常一样触发自己的completionBlock,以及进度块,它告诉您有多少请求已经完成。然后,一旦全部完成,最后的完成块就会执行。

    所以在你的情况下,它可能很简单:

    [someClient enqueueBatchOfHTTPRequestOperationsWithRequests:[NSArray arrayWithObjects:request1, request2, request3, request4, nil] progressBlock:nil completionBlock:(controller logic here)];

    【讨论】:

    • 我不久前尝试了AFNetworking,但我有点尴尬,因为它不能轻松更改超时间隔,我认为这就是我坚持使用ASIHttpRequest的原因。我可能会再给 AFNetworking 一个机会。
    • 更改超时间隔就像在NSMutableURLRequest 上设置属性一样简单。此外,your timeout interval isn't necessarily guaranteed to be observed。 ...也就是说,我希望这次你发现 AFNetworking 更受欢迎:)
    猜你喜欢
    • 2012-12-14
    • 2013-05-07
    • 2013-08-20
    • 2014-01-18
    • 2017-12-08
    • 2019-07-03
    • 2017-07-13
    • 2012-02-10
    相关资源
    最近更新 更多