2012-04-23 67 views
1

可能重复:
Core Data vs SQLite 3在核心数据中,您可以在从数据库检索其他数据的同时插入数据吗?

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

会这样的工作在核心数据?我可以在向数据库中插入新数据的同时从数据库中检索数据?

+0

速度差异:CoreData应该慢一点,因为它是Sqlite3的一个OO(ObjC)包装器。否则:SQLite不允许你(AFAIK)同时插入和获取数据。无论如何,你为什么要这么做? – 2012-04-23 19:45:51

+0

thx为重播,我有一个音乐应用程序,我从网络服务(每次最多500)下载数据(歌曲详细信息)。当我有2页(1000首歌曲)从服务中获得我插入第500行,并在第二次我再次插入,在这个时候,我不能让任何选择在桌子上获取专辑,艺术家,流派从这张桌子。所以我想使用CoreData并想知道什么是差异。 – MTA 2012-04-23 19:50:55

+1

我重写了这个问题,重点关注你的核心问题:你可以在Core Data中同时读写数据到数据库吗?要求SQLite和Core Data之间的所有差异都是太广泛的话题,并且Jason的链接所涉及的大部分内容已经涵盖了。 – 2012-04-23 21:16:33

回答

3

是的,您可以同时在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的细节。