iOS核心数据架构提示需要

时间:2011-08-01 12:15:59

标签: iphone objective-c ios core-data architecture

我只想了解构建我的第一个Core Data应用程序的最佳方法,以及我需要的主要对象和交互。

数据远程存储,我需要通过HTTP访问它,它将以JSON格式响应。我想使用Core Data在设备上缓存它。每天服务器上都会有新数据,因此我需要访问它并相应地更新模型。

我是否可以使用任何SDK类来帮助我解决这个问题,或者我是否会亲自动手推出它?

我想我正在寻找一个模型控制器,我调用它来获取数据,它将返回核心数据缓存数据,并可能对Web服务进行后台调用以获取最新数据,然后通知视图有新数据。当我以JSON格式从Web服务获取数据时 - 我需要将此映射到ManagedObjects,这是对我的核心数据上下文的添加。

3 个答案:

答案 0 :(得分:5)

感谢dtuckernet,这就是我所做的 - 从许多来源收集信息,我相信这是最好的解决方案。任何人都可以随意批评(建设性地)......

  1. 我的核心数据堆栈在CoreDataStack.h(单例)中 - 并非完全必要,但它整理了我的应用程序委托类。
  2. 我有一个基础CoreDataBackedTableViewController:UITableViewController
  3. 我的每个表视图屏幕都扩展了CoreDataBackedTableViewController,并且有一个ivar到ModelController类。
  4. 一个示例ModelController类有一个 - (NSFetchedResultsController *)getData方法,它构造NSFetchedResultsController(也保留了一个引用)并将它返回给视图控制器,后者还将它存储在CoreDataBackedTableViewController中(它监听对它的更新和编辑)数据)。拥有ModelController类允许我封装我的数据访问,可能有2个不同的视图控制器使用它(可能是iPhone和iPad)
  5. 在getData中 - 我异步调用我的后端webservice。使用代表进行回调
  6. 后端正在使用SBJSON进行解析和NSHttpConnection以及手动滚动的HttpService类。
  7. 当后端返回数据时,它调用模型控制器上的委托更新核心数据 - 我的fetchedResultsController知道这一点并自动更新我的界面!这一点有多酷 - 不是我付出的很多努力。我必须检查一下我之前是否已经下载过数据,或者不是为了避免重复。
  8. 准备将其推出到我的应用程序的其余部分....
  9. 如果有人想要澄清任何步骤,请告诉我。

答案 1 :(得分:3)

这里有很多不同的作品。请允许我提出一些建议:

  1. 为了从服务器获取数据,我会查看ASIHTTPRequest。这是管理HTTP请求的好方法(无论您使用的是JSON,XML还是其他......)。 http://allseeing-i.com/ASIHTTPRequest/
  2. 对于JSON翻译,我会看一下SBJSON。该网站提供了有关如何入门的文档:http://code.google.com/p/json-framework/
  3. 对于您的整体架构,我将实现一个包装您的服务调用的委托模式。在此委托中,您将在将数据传递给应用程序的其余部分之前处理JSON数据到实际Objective-C类的转换。
  4. 一旦解析了数据并将其放入Objective-C对象(我希望这些对象是与您的数据模型目录相关联的NSManagedObject的子类),我会执行保存。
  5. 然后我会使用NSNotification通知所需的视图数据已更改。

答案 2 :(得分:3)

你绝对想要使用RESTKit。这是从RESTful Web服务到Core Data的直接连接。使用Xcode的内置工具定义数据模型,使用RESTKit为Web服务定义映射层,让库完成繁重的工作。太棒了。