在iOS上编写异步Web服务调用的最佳实践

时间:2011-09-19 16:53:13

标签: ios xcode web-services asynchronous

我有一个与Web服务对话的iPhone应用程序,并将数据从Web服务提取到设备。将数据推送到核心数据,然后更新GUI。

执行此操作的过程如下:

  1. GUI事件创建对事务层(模型)的调用。
  2. 事务处理层(模型)创建对Web服务的异步调用。
  3. 从Web服务收到的响应,由事务层解析(检查错误)。将结果推送到核心数据中。
  4. 发送GUI通知(错误或非错误)以进行更新。
  5. 我有很多这些异步调用,用于刷新数据的不同部分。我的GUI客户端订阅了许多这些通知。

    我发现,当我回到调试时,GUI端的代码有点混乱。因为操作是由通知触发的。

    我真正想做的是在第2,3和4项周围使用某种类型的包装函数。这样代码看起来更流线型。

    if (![TransactionLayerModelClass getDataFromWebServerWrapper: args]) {
        // error actions
    } else {
        // good actions
    }
    

    我甚至不确定这是否可行,并且在谷歌搜索中找不到任何解决方案。但如果是的话,我认为它会显着提高我的代码的可读性。

1 个答案:

答案 0 :(得分:2)

要编写看起来像你想要的代码,你需要使用块:

[TransactionLayerModelClass 
     getDataFromWebServerWrapper: args
     errorBlock:^(NSError* error)
        {
           // error actions
        }
     successBlock:^(NSData* data)
        {
           // good actions
        }];

仅在定位iOS 4及更高版本时才能使用块。它们非常有用,虽然它们易于滥用和滥用,但如果正确实施,这是它们理想的应用之一。

http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/Blocks/Articles/00_Introduction.html