【发布时间】:2016-04-07 10:41:33
【问题描述】:
我遇到了一个可怕的问题。我正在使用我的主 MOC 将带有字段 sync 的 managedObject "Customer" 保存为 false。然后在与服务器同步后,我使用私有 MOC 将 Customer 与 sync 字段保存为 true。当我保存它时,通知会通过,主 MOC 会正确保存客户。然后,当我编辑该客户时,会发生相同的过程。但是这一次,即使 sync 字段是true,直到私有 MOC 保存它,另一端收到的通知包含 Customer 和 同步为false。如果我重复这个过程,sync 会变成true。如果我使用私有 MOC 保存一些其他数据,而不是重复,那么通过该通知,Customer 还带有 sync 字段作为true。我不明白为什么通知方法不能正常工作。在 didsavenotification 的 addObserver 中,我已将 object 指定为私有 MOC 本身。有人请帮忙。
这些是此流程中突出的代码 sn-ps。
//赋值为假
selectedCustomer.synced = NSNumber(bool: false)
//使用主MOC保存
try managedObjectContext.save()
//将同步的详细信息分配给字典
let cust: CustomerDetails = CustomerDetails(data: customer)
cust.synced = true
//将字典分配给使用私有MOC从coredata获取的客户managedObject
assignData(customerDetails, toCustomer: customer)
//保存私有MOC
try syncManagedObjectContext.save()
//获取通知并保存
managedObjectContext.performBlock { () -> Void in self.managedObjectContext.mergeChangesFromContextDidSaveNotification(notification)
}
//注册通知
let notificationCenter = NSNotificationCenter.defaultCenter()
notificationCenter.addObserver(self, selector: #selector(AppDelegate.managedObjectContextDidSave(_:)), name: NSManagedObjectContextDidSaveNotification, object: syncManagedObjectContext)
编辑:
这些是我正在使用的 MOC 的定义
lazy var managedObjectContext: NSManagedObjectContext = {
let coordinator = self.persistentStoreCoordinator
var managedObjectContext = NSManagedObjectContext(concurrencyType: .MainQueueConcurrencyType)
managedObjectContext.mergePolicy = NSMergeByPropertyStoreTrumpMergePolicy
managedObjectContext.persistentStoreCoordinator = coordinator
return managedObjectContext
}()
lazy var syncManagedObjectContext: NSManagedObjectContext = {
let coordinator = self.managedObjectContext.persistentStoreCoordinator
var managedObjectContext = NSManagedObjectContext(concurrencyType: .PrivateQueueConcurrencyType)
managedObjectContext.mergePolicy = NSMergeByPropertyStoreTrumpMergePolicy
managedObjectContext.persistentStoreCoordinator = coordinator
return managedObjectContext
}()
【问题讨论】:
-
可能需要显示有关如何保存两次的代码
标签: ios swift core-data nsnotificationcenter