【发布时间】:2020-12-24 09:27:10
【问题描述】:
我在后台保存内容时遇到问题。所以我有两个与 RxSwift 链接的操作。 第一项被保存,当我在主上下文中获取它们时,所有信息都在那里。 但是在第二个操作中,我获取了相同的对象,并使用更多信息对其进行了更新。 现在无论我在那里做什么,它都不会更新实体。
这是我的核心数据代码:
class CoreDataStack {
static let modelName = "Mo_Application"
static let model: NSManagedObjectModel = {
let modelURL = Bundle(for: CoreDataStack.self).url(forResource: modelName, withExtension: "momd")!
return NSManagedObjectModel(contentsOf: modelURL)!
}()
lazy var mainContext: NSManagedObjectContext = {
return self.storeContainer.viewContext
}()
lazy var storeContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: CoreDataStack.modelName, managedObjectModel: CoreDataStack.model)
container.loadPersistentStores { (_, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
}
return container
}()
func newDerivedContext() -> NSManagedObjectContext {
return self.storeContainer.newBackgroundContext()
}
func saveContext() throws {
try? self.saveContext(mainContext)
}
func saveAndWaitContext(_ context: NSManagedObjectContext) throws {
if context != mainContext {
try self.saveAndWaitDerivedContext(context)
return
}
context.performAndWait {
try? context.save()
}
}
func saveAndWaitDerivedContext(_ context: NSManagedObjectContext) throws {
context.performAndWait {
try? context.save()
try? self.saveAndWaitContext(self.mainContext)
}
}
}
我在第一次操作中做了什么:
let context = coreDataStack.newDerivedContext()
let object = Foo(context: context)
object.name = "Name 1"
try coreDataStack.saveAndWaitDerivedContext(context)
maybe(.success(self)) (RxSwift to complete)
在第二个操作中,我首先获取对象:
let context = coreDataStack.newDerivedContext()
let fetchRequest: NSFetchRequest<Foo> = Foo.fetchCreatedBy(user: user)
let objects: [Foo] = try context.fetch(fetchRequest)
let object = objects.first { $0.id == self.id }
if let object = object {
object.name = "Name updated"
}
try coreDataStack.saveAndWaitDerivedContext(context)
maybe(.success(self))
当我现在对我的 mainContext 进行 fetch 时,旧值仍然存在。
当我调用我的 saveAndWaitDerivedContext 时,背景上下文 hasChanges。但是当我保存 mainContext 时它没有变化吗?这正常吗?
我做错了什么?
【问题讨论】: