【发布时间】:2011-01-05 07:17:31
【问题描述】:
在 iPhone 应用程序中访问 Web 服务是一个我还没有找到清晰、漂亮的解决方案的问题。我不是在谈论如何在这里发送查询或解析响应,而是在谈论“大局”的答案。
不考虑服务器端技术,您如何/将如何将您的模型对象插入您的 Web 服务?你如何设计你的代理对象?你如何缓存你的资源?
【问题讨论】:
标签: iphone cocoa-touch web-services
在 iPhone 应用程序中访问 Web 服务是一个我还没有找到清晰、漂亮的解决方案的问题。我不是在谈论如何在这里发送查询或解析响应,而是在谈论“大局”的答案。
不考虑服务器端技术,您如何/将如何将您的模型对象插入您的 Web 服务?你如何设计你的代理对象?你如何缓存你的资源?
【问题讨论】:
标签: iphone cocoa-touch web-services
如果您的 Web 服务恰好是 Ruby on Rails 应用程序,那么 Objective Resource 是一个很棒的工具:http://iphoneonrails.com/。
如果不是,那么我倾向于使用 ASIHTTPRequest (http://allseeing-i.com/ASIHTTPRequest/),它提供了一个很好的网络层。根据 API,您可以直接使用 ASI 对象,或者如果您想添加按请求功能(例如身份验证或响应解析),您可以子类化现有 ASI 类。
您通常希望在后台运行请求,以便在等待请求完成时 UI 不会被阻塞。您始终可以使用后台线程路由,但是 ASIHTTPRequest 提供的一种不错的“Objective C”风格方法是提供一个在请求完成时调用的委托(另请参阅http://allseeing-i.com/ASIHTTPRequest/How-to-use 的“创建异步请求”)。在许多情况下,请求委托是发起请求的视图控制器。
模型层取决于复杂性,以及数据的格式。我使用过的大多数 API 都使用 JSON,您可以使用 SBJSON 或 yajl-objc 对其进行解析。这些通常为您提供解析为 NSString、NSArray 和 NSDictionary 等基类的数据。有时这就足够了,或者如果您希望您的模型作为它们自己的类存在,那么您可以让模型从一个负责将 NSDictionary/NSArray 转换为属性的基类继承。
最后,对于缓存,Core Data 提供了一种持久保存到磁盘的好方法。对于内存中的缓存,您可以让请求发生在控制器之间共享的单独“管理器”类中。这些管理器使用如下所述的 Singleton 设计模式:What should my Objective-C singleton look like?。
【讨论】: