问题描述
根据苹果指南,必须在后台线程上实例化NSManagedObjectContext。因此,我在AppDelegate类中按如下方式安排了coredata堆栈。
lazy var viewContext: NSManagedObjectContext = {
return self.persistentContainer.viewContext
}()
lazy var cacheContext: NSManagedObjectContext = {
return self.persistentContainer.newBackgroundContext()
}()
lazy var updateContext: NSManagedObjectContext = {
let _updateContext = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
_updateContext.parent = self.viewContext
return _updateContext
}()
然后我创建了一个Singleton类来管理我的CoreData操作。
class StorageManager:NSObject {
private override init() {}
private static var SMInstance: StorageManager?
public static var shared : StorageManager {
if SMInstance == nil {
SMInstance = StorageManager()
}
return SMInstance!
}
//Represent a single context for all the operations with lazy loading
lazy var managedObjectContext : NSManagedObjectContext = {
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.viewContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
return appDelegate.viewContext
}()
lazy var privateMOC : NSManagedObjectContext = {
let appDelegate = UIApplication.shared.delegate as! AppDelegate
return appDelegate.updateContext
}()
private func synchronize() {
do {
try self.privateMOC.save()
self.managedObjectContext.performAndWait {
do {
try self.managedObjectContext.save()
print("Saved to main context")
} catch {
print("Could not synchonize data. \(error),\(error.localizedDescription)")
}
}
} catch {
print("Could not synchonize data. \(error),\(error.localizedDescription)")
}
}
}
将数据保存到同一类中的示例保存方法如下。但这有时会给我这个错误
***由于未捕获的异常'NSGenericException'终止了应用程序,
原因:'***集合<__ nscfset>在
被枚举时发生了突变...
func savedata() {
DispatchQueue.main.async(execute: {
let entity = Community(context: self.privateMOC)
entity.name = "JOHN PAUL"
self.privateMOC.performAndWait {
self.synchronize()
}
})
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)