【问题标题】:In Core Data, can you insert data while retrieving other data from the database? [duplicate]在 Core Data 中,您可以在从数据库中检索其他数据的同时插入数据吗? [复制]
【发布时间】:2012-05-04 10:53:42
【问题描述】:

可能重复:
Core Data vs SQLite 3

我一直在使用 SQLite 在我的 iOS 应用程序中保存数据(对于最多超过 20,000 行的表)。但是,我在使用 SQLite 时遇到了问题,当我尝试在向表中插入数据时使用 SELECT 语句时,SELECT 语句将不起作用。

这样的东西在 Core Data 中可以工作吗?我可以在向数据库中插入新数据的同时从数据库中检索数据吗?

【问题讨论】:

  • 速度差异:CoreData 应该慢一点,因为它是 Sqlite3 的 OO (ObjC) 包装器。否则:SQLite 不允许您(AFAIK)同时插入和获取数据。无论如何,你为什么想要这个?
  • 感谢重播,我有一个音乐应用程序,我可以从网络服务(每次最多 500 个)下载数据(歌曲详细信息)。当我从服务中获取 2 页(1000 首歌曲)时,我插入前 500 行,第二次我再次插入,这次我无法在桌子上进行任何 SELECT 以获取专辑、艺术家、流派从这张表。所以我想使用 CoreData 并想知道有什么不同。
  • 我重写了问题,专注于您的核心问题:Core Data 中是否可以同时向数据库读取和写入数据。询问 SQLite 和 Core Data 之间的所有差异是一个过于宽泛的话题,Jason 链接到的问题已经涵盖了大部分内容。

标签: iphone objective-c sqlite core-data


【解决方案1】:

是的,您可以同时在 Core Data 上执行查询和插入操作,我假设您希望在多个线程上执行此操作。最好的方法是为每个线程(或队列)设置一个 NSManagedObjectContext。

我设置它的方式是让您的主线程 (UI) 有一个 NSManagedObjectContext 仅用于获取数据,一个用于在单独的线程上插入,其 parentContext 设置为主线程。这样,当您保存在子上下文中时,您将在主上下文中看到这些新对象,并且您可以进行新的获取(或者如果您有 NSFetchedResultsController,它会为您更新它)。

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdConcurrency.html#//apple_ref/doc/uid/TP40003385

关于核心数据的 WWDC 2011 视频详细讨论了 parentContext。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-12
    • 1970-01-01
    • 1970-01-01
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    • 2011-09-03
    相关资源
    最近更新 更多