【发布时间】:2020-12-02 02:13:45
【问题描述】:
我不确定我在这里做错了什么,但由于这个原因,我的应用程序崩溃了。这是我在 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 = User(context: self.privateMOC)
entity.name = "JOHN PAUL"
//IT crash here
self.privateMOC.performAndWait {
self.synchronize()
}
})
}
【问题讨论】:
-
你已经问过这个问题here。请不要重复发布相同的问题。
标签: ios swift core-data swift5 nsmanagedobjectcontext