sqlite 表更新时有什么方法可以得到通知吗?

Is there any way to be notified when sqlite tables update?

我正在 FMDB 的帮助下开发一个使用 sqlite 数据库的 iOS 应用程序。我曾经使用 Core Data,但一次插入 5000 个项目时速度非常慢。 FMDB 使用事务使此类插入速度更快!

我还需要一些机制,可以在更新来自 sqlite table 的某些项目时通知我的视图控制器。 NSFetchedResultsController 是我的解决方案,但由于我使用 FMDB 我不能再使用 NSFetchedResultsController.

sqlite table更新时有什么方法可以通知吗?

我对您的建议是恢复到 Core Data。您应该解决插入性能问题,而不是下降到数据库级别并不得不重新访问数据模型设置的各种复杂得多的机制。您的具体问题就是一个很好的例子。

要优化插入速度,请参考大量有用的 SOF 答案。正如已经指出的那样,为您的数据类型找到正确的 批量大小 是这里的关键。

但是,无论您进行何种优化,您都可以利用 Core Data 框架在后台执行这些密集操作。这不会影响您的应用程序的可用性,可能甚至少于您使用 FMDB 插入 0.7 秒的时间。

我已经搜索了一段时间并找到了解决方案。奇怪我怎么没早点找到

我现在的选择是YapDatabase。我不知道它的弱点,但这个库有很多优点:

  • 定期更新。有超过 1000 个提交!哇!
  • 这是一家 key/value 商店。我只是在保存我的 NSDictionaries。没有更多的数据模型和头痛。
  • 性能很棒。我比较了 Core Data 的删除 + 插入速度。
  • 最棒的是“观看次数”:

Views allow you Sort, Group & Filter your data. Perfect for tableViews, collectionViews, and more. And they even provide NSFetchedResultsController style updates to make it easy to animate changes to your tableViews/collectionViews.