我在我的应用中处理了两个完整的Core Data
堆栈:
AppDelegate
中默认提供的那个。NSManagedObject
更新,以避免阻止UI。我有一个班级来创建第二个"辅助"核心数据堆栈,我这样做:
class CoreDataStack: NSObject {
class func getPrivateContext() -> NSManagedObjectContext {
let bundle = NSBundle.mainBundle()
let modelURL = bundle.URLForResource("MyApp", withExtension: "momd")
let model = NSManagedObjectModel(contentsOfURL: modelURL!)!
let psc = NSPersistentStoreCoordinator(managedObjectModel: model)
let privateContext = NSManagedObjectContext(concurrencyType: NSManagedObjectContextConcurrencyType.PrivateQueueConcurrencyType)
privateContext.persistentStoreCoordinator = psc
let documentsURL = CoreDataStack.applicationDocumentsDirectory()
let storeURL = documentsURL.URLByAppendingPathComponent("MyApp.sqlite")
let options = [NSMigratePersistentStoresAutomaticallyOption: true]
var error: NSError? = nil
let store: NSPersistentStore?
do {
store = try psc.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: storeURL, options: options)
} catch let error1 as NSError {
error = error1
store = nil
}
if store == nil {
print("Error adding persistent store: \(error)")
abort()
}
return privateContext
}
class func applicationDocumentsDirectory() -> NSURL {
let fileManager = NSFileManager.defaultManager()
let urls = fileManager.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)
return urls[0]
}
}
我首先需要确认/澄清一些观点:
A)创建一个完整的Core Data堆栈以便像我一样使用私有队列中的上下文是否合法/正确?
B)是否会创建与NSManagedObjectModel
默认核心数据堆栈中使用的文件相同的资源和相同.sqlite
文件中的新AppDelegate
导致问题?
关于管理我拥有的两个上下文(AppDelegate
中的默认值,让我们称之为mainContext
,以及我在私有队列中创建的上下文,让我们调用它{ {1}}):
privateContext
旨在在整个应用中显示mainContext
信息。NSManagedObject
旨在用于调用Web服务以获取更新的数据,使用收到的信息创建新的privateContext
,并将这些新对象与应用程序已有的对象进行比较。 / LI>
我对此的疑问是:
NSManagedObject
或privateContext
来使用performBlock
?这是否包括所有相关操作,例如读取/插入performBlockAndWait
对象,以及清除/保存它?privateContext
应该与主队列/线程相关联,对吧?那么所有相关的操作都应该在主线程中执行...... mainContext
有自己的完整核心数据堆栈...如果我保存其对象,它们是否会存储在与保存{{1}时相同的privateContext
文件中}}?或者这样的文件会是某种方式"重复"?.sqlite
应该从其私有队列中保存数据,并且mainContext
应该在主线程中使用,是否会导致任何问题从privateContext
中获取从中保存的数据mainContext
?我需要帮助来理解并正确管理我的应用中的mainContext
并发性,我对所有这些持久性工作人员造成了混乱,我偶尔会发现似乎有效的操作错误。 ..非常感谢。