gpt4 book ai didi

ios - 如何在 iOS 9.0 Beta 中实现新的 Core Data 模型构建器 'unique' 属性

转载 作者:技术小花猫 更新时间:2023-10-29 11:19:17 26 4
gpt4 key购买 nike

在 WWDC15 视频 session 中,'What's New in Core Data'在 10:45 分钟(进入演示文稿),Apple 工程师描述了模型构建器的一项新功能,该功能允许您指定独特的属性。一旦你设置了那些独特的属性,Core Data 将不会创建具有该属性的重复对象。这是为了消除在创建新对象之前检查对象是否相同的需要。

我一直在试验这个,但没有运气阻止创建具有相同“唯一”属性的新对象(重复对象)。除了 5 分钟的视频说明,我还没有找到任何其他描述如何使用此功能的信息。

enter image description here

有没有人有在核心数据模型中实现“唯一”属性的经验?

最佳答案

简答:您需要将这一行添加到您的核心数据堆栈设置代码中:

managedObjectContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy

长答案:我为此苦苦挣扎了一段时间,但我想我现在已经弄明白了:

唯一约束 (UC) 不会阻止在上下文中创建重复项。只有当您尝试保存该上下文时,Core Data 才会检查 UC 的唯一性。

如果它发现多个对象具有相同的 UC 值,默认行为是抛出错误,因为默认的冲突合并策略是 NSErrorMergePolicyType。该错误在其 userInfo.conflictList 中包含冲突对象,因此您可以手动解决冲突。

但大多数时候您可能想使用另一个 merge policies相反,让 Core Data 自动合并冲突。这些合并策略之前确实存在,它们用于不同上下文中对象之间的冲突。也许这就是为什么在 WWDC session 220 的 UC 功能上下文中没有提及它们的原因。通常正确的选择是 NSMergeByPropertyObjectTrumpMergePolicy。它基本上是说“新数据胜过旧数据”,这就是您在从外部源导入新数据时的常见情况下所需要的。

(提示:首先,我在验证此行为时遇到了问题,因为重复的对象似乎一直保留在上下文中,直到保存操作完成 - 在我的例子中,这在后台队列中异步发生。所以如果你获取/计算你的对象在点击保存按钮后,您可能仍然会看到重复项。)

关于ios - 如何在 iOS 9.0 Beta 中实现新的 Core Data 模型构建器 'unique' 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30894026/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com