【问题标题】:iOS Core Data Architecture tips wanted需要 iOS 核心数据架构技巧
【发布时间】:2011-10-17 09:59:40
【问题描述】:

我只是想获得一些关于构建我的第一个 Core Data 应用程序的最佳方法的建议,以及我需要的主要对象和交互。

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

我可以使用任何 SDK 类来帮助我解决这个问题,还是我要亲自动手?

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      1. 我在 CoreDataStack.h(单例)中有我的核心数据堆栈 - 不是完全必要的,但它使我的应用委托类变得整洁。
      2. 我有一个基础 CoreDataBackedTableViewController : UITableViewController
      3. 我的每个表格视图屏幕都扩展了 CoreDataBackedTableViewController 并有一个指向 ModelController 类的 ivar。
      4. 示例 ModelController 类有一个 - (NSFetchedResultsController *) getData 方法,该方法构造 NSFetchedResultsController(还保留一个 ref)并将其返回给视图控制器,该视图控制器也将其存储在 CoreDataBackedTableViewController 中(监听更新和编辑数据)。有了 ModelController 类,我可以封装我的数据访问权限,以便可能有 2 个不同的视图控制器使用它(可能是 iPhone 和 iPad)
      5. 在 getData - 我异步调用我的后端 Web 服务。使用委托进行回调
      6. 后端使用 SBJSON 进行解析,使用 NSHttpConnection 和手卷 HttpService 类。
      7. 当后端返回数据时,它会调用 ModelController 上的委托来更新核心数据 - 我的 fetchedResultsController 知道这一点并自动更新我的界面!这一点有多酷——我没有付出太多的努力。我必须对我之前是否已经下载过数据进行一些检测以避免重复。
      8. 准备将其推广到我的应用程序的其余部分......

      如果有人想了解任何步骤,请告诉我。

      【讨论】:

        【解决方案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 通知所需的视图数据已更改。

        【讨论】:

        • 谢谢。我已经使用了很多这些点,除了 NSNotification 来通知视图数据已经改变。我使用了 NSFetchedResultsController,它为我做了这件事——还有更多。
        猜你喜欢
        • 1970-01-01
        • 2019-01-05
        • 1970-01-01
        • 2011-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多