Swift - 停止实体的iCloud mergeChangesFromContextDidSaveNotification

时间:2015-04-14 14:08:00

标签: swift core-data icloud

NSNotificationCenter.defaultCenter().addObserver(self, selector: "persistentStoreDidImportUbiquitousContentChanges:", name:NSPersistentStoreDidImportUbiquitousContentChangesNotification, object: coordinator)


func persistentStoreDidImportUbiquitousContentChanges(notification: NSNotification) {
    let dictionary = notification.userInfo!
    println(dictionary)
    var moc: NSManagedObjectContext = self.managedObjectContext!
    moc.performBlock { () -> Void in
        moc.mergeChangesFromContextDidSaveNotification(notification)
    }
}

println(dictionary)我得到了这个;

[inserted: {(
    0x7a1111f0 <x-coredata://5D1E5D9E-BB22-445E-BF1F-9E7012381FA1/People/p5>,
    0x7a115620 <x-coredata://5D1E5D9E-BB22-445E-BF1F-9E7012381FA1/Settings/p5>
)}, deleted: {(
)}, updated: {(
)}]
[inserted: {(
    0x78ed06f0 <x-coredata://5D1E5D9E-BB22-445E-BF1F-9E7012381FA1/People/p6>,
    0x78e94ae0 <x-coredata://5D1E5D9E-BB22-445E-BF1F-9E7012381FA1/Settings/p6>
)}, deleted: {(
)}, updated: {(
)}]

问题

  1. 如何防止插入设置?
  2. 如何查找字典是否会在“设置”中插入信息?

1 个答案:

答案 0 :(得分:0)

你没有阻止它。当您致电mergeChangesFromContextDidSaveNotification时,您将合并保存通知中的所有更改。没有定制。

您可以使用NSManagedObjectContext的{​​{1}}设置来控制 如何合并更改。这会影响合并更改时mergePolicy加载的数据的影响 - 例如,是保留内存中的更改还是覆盖它们。内置合并政策包括mocNSMergeByPropertyStoreTrumpMergePolicyType等内容,您也可以创建自己的自定义政策。

无论如何,试图阻止它都没有意义。这里合并更改的重点是这些更改已保存到持久性存储文件中,并且您确保NSOverwriteMergePolicyType知道这些更改。如果您以某种方式阻止moc了解某个实体类型的更改,那么这些更改仍然存在,只有现在moc才会过时。