【问题标题】:iOS core data:how to use preloaded sqlite database which contains multiple tablesiOS核心数据:如何使用包含多个表的预加载sqlite数据库
【发布时间】:2012-02-21 13:00:41
【问题描述】:

我的应用程序有一个已预加载数据的 sqlite 数据库。数据库有很多表。我想显示一个表列表,所以我必须查询数据库或只列出我的实体?!当用户点击表名时,下一个 uitableview 会显示该指定表的数据。表之间没有关系。现在只从数据库中选择很重要。 前进的最佳方式是什么? sqlite api 或核心数据。我是 iOS 编程新手。我正在阅读有关核心数据的信息。听起来不错,但我很困惑如何解决这个问题。

编辑:顺便说一下,表格是相同的。它们都具有相同的属性。我已经在表格中拆分,以便每个表格代表一个类别,我想它最适合 iDevices 上的内存使用。

【问题讨论】:

  • 关于你的最后一点 - 这可能是浪费精力。如果您使用核心数据并获取请求,则最好将单个表/实体和类别作为属性。
  • 将所有数据放在一个表中不会导致延迟?我可能会有超过 10K 行数据。

标签: objective-c ios core-data ios5 sqlite


【解决方案1】:

我强烈建议您尝试学习 Core Data 方法来将您的数据作为对象图来处理。它确实值得付出努力,因为您可以获得很多用于表格视图等的附加功能,所有这些都具有出色的自动内存管理功能。如果您处理原始 SQLite 并且有大量数据或复杂表,内存将很容易成为一个相当大的问题。

这样做:

在您的核心数据模型中创建实体。访问现有的 SQLite 存储并为新的核心数据表重新创建所有数据。这通常会占用大量内存和处理器,因此您通常在模拟器上执行此操作,而不是在设备上。

成功导入数据后,您可以删除 sqlite 库和导入函数,并使用您真正的核心数据持久存储。

这有点费力,但我保证这是值得的。

【讨论】:

  • 所以你的意思是我应该将我的 sqlite 迁移到真正的核心数据。我也更喜欢这样,但我想保留该选项以供将来更新表格。它可能会获得额外的属性并将数据批量插入列中。那么有没有一种方法可以用核心数据批量插入数据?
  • 对。如果将来有更改,只需保留您的导入代码并在以后根据需要进行调整。我这样做了几次,这是一个可行的过程。
  • 如何进行数据迁移?我的意思是当我将所有 sqlite 数据导入核心数据时,它发生在设备/模拟器上,所以在我的 xcode 项目中没有它的副本,对吗?核心数据库保存在哪里?当我部署应用程序时,它不应该进行数据导入,因为它可能需要更长的时间来处理。有什么建议吗?
  • 是的,你将它导入一个新的核心数据存储(也是一个 sqlite 数据库)。然后,您在模拟器的应用程序文档目录中找到此数据库(类似于~Library/Application Support/iPhone Simulators/5.0/Applications/<longIDCode>/Documents 并将其复制到您的应用程序包中。第一次运行时,再次将此种子数据复制到应用程序文档目录。
【解决方案2】:

我会使用 SQLite,因为您已经填充了 .sqlite 文件。如果您想轻松使用 SQLite,我建议与 FMDB 相处。

至于您的表相同的方式,我只能建议您创建一个共享方法,如- (void)itemsWithCategory:(NSString *)category,您的整个数据库通信将通过此函数。

【讨论】:

  • 感谢您的想法。我想要一个共享的通信,无论是核心日期还是 sqlite api。我已经看过 FMDB。减少对外部资源的依赖不是最好的吗?我现在正在编码。如果有人有其他想法。请务必告诉我们。
猜你喜欢
  • 2012-07-14
  • 2012-01-30
  • 2014-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-19
相关资源
最近更新 更多