gpt4 book ai didi

ios - 核心数据 : best way of checking the uniqueness of an attribute

转载 作者:行者123 更新时间:2023-11-29 02:25:50 24 4
gpt4 key购买 nike

据我所知,没有办法通过 Core Data 将实体的属性设置为唯一的,无论是以编程方式还是在 Xcode 的编辑器中...我需要确保某些托管对象可以如果与我想要唯一的属性的值发生冲突,则不会被创建,并且我一直在阅读一些处理该问题的帖子。

我找到了几种方法(例如 Core Data unique attributes ):

  1. 使用-validateValue:forKey:error:
  2. 编写某种自定义方法来检查属性的值是否已存在

最值得推荐的选项应该是什么?

谢谢

最佳答案

您将需要某种自定义代码,无论是将其放在 validateValue:forKey:error: 中还是放在自定义方法中或其他位置中。

是否使用内置验证方法实际上取决于您喜欢如何组织代码。我更喜欢做类似的事情

  1. 检查该值是否唯一。
  2. 如果是,则插入一个新实例。

这部分是因为我发现内置验证方案很麻烦,但主要是因为每次保存对对象的更改时该代码都会运行。如果您的检查位于 validateValue:forKey:error: 中,则即使在验证该值是唯一的之后,您也将重复运行它。不过,也许您需要这样做,因此您的情况的最佳答案取决于您的应用程序需要如何工作的更大情况。

进行验证的简单方法是使用标识您需要检查的键和值的谓词进行提取。我对另一个答案中描述的常见获取方法所做的一个更改是,我将使用 countForFetchRequest:error: 而不是 executeFetchRequest:error:。听起来您实际上并不需要在验证期间获取现有对象,您只需要知道是否存在任何对象,因此只需检查即可。

根据唯一属性的类型,您也许可以减少这样做所造成的性能损失。例如,如果它是一个字符串。检查所有现有字符串是否匹配的成本相对较高。另一方面,检查一堆现有整数的成本很低。在这种情况下,您可能会发现值得将数字属性添加到存储唯一字符串值的数字哈希的实体类型。仅在检查唯一性时使用哈希。这比查找匹配字符串要快得多,NSString 甚至有一个方便的 hash 方法来为您计算值。

关于ios - 核心数据 : best way of checking the uniqueness of an attribute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27548473/

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