0

如何加载从网上下载的表格并将其放入核心数据中?如果我有一个大约 2000 行的 CSV 文件(可能是 SQLite),它已经更新,并像 Amazon Web Service 一样放到网络上,当用户使用应用程序时,如何将其加载到核心数据中?我想完全替换以前的文件,并重新加载表。我想我将它保存到文档目录中,但是如何将它加载到核心数据中并快速加载,这样用户就不必等待太久?

我不知道用户需要什么数据,自上次使用以来添加或删除了什么,所以我不能只查询更改。该表由文本、整数和地理编码组成,我将每月更新两次。

核心数据可以从外部文件读取以填充 tableView,还是只能从其内部读取?我绝对不需要表之间的关系,所以如果这妨碍了我,我可以删除它。可能会或可能不会加载第二个表。改用 SQLite 表会更好吗?这部分核心数据我之前没有做过。什么是最佳实践?代码示例会很有帮助。

4

1 回答 1

2

我假设您精通使用 Core Data,并且您正在部署到 iOS 5 及更高版本。我还假设您非常了解 CSV 格式。那么这将是一个开始的设计:

  1. 创建解析器对象。该对象负责理解 csv 文件(这是您需要自己编写的逻辑,没有原生的 csv-parser 类)。你给这个对象一个 NSString 或文件的本地 URL 并逐行读取它。假设每一行都包含一个 Core Data 实体的数据:此解析器然后从字符串的第一行中提取值并创建/更新现有的 Core Data 实体。有关更新/创建核心数据实体的有效方法,请参阅此链接。确保所有这些解析都在 backgroundThread 上完成,并使用具有私有队列类型的 NSManagedObjectContext。
  2. 创建一个使用 NSFetchedResultsController 的 UITableViewController,您使用 NSManagedObjectContext 进行初始化,该 NSManagedObjectContext 是解析器对象中使用的 NSManagedObejctContext 的父级。确保在初始化时给它主队列并发类型。这样,每次解析器创建/更新实体时,它都会将其保存到父上下文中。此上下文反过来通知 NSFetchedResutsController,您可以通过 NSFetchedResultsController 委托方法分别为每个更新/创建的实体更新 UI,尽可能快地向用户显示更改。
  3. 确保某些监督对象(可能是 Data-manager,或者可能是网络类,或者可能是 viewController,尽管我会选择 Data-manager)被告知完整的解析过程已经结束,以便 managedObject 在UITableViewController 可以保存(这实际上会持久化数据)。
于 2013-11-02T19:23:50.877 回答