gpt4 book ai didi

objective-c - Core Data (Mac) 如何在 ID 字段上实现自增

转载 作者:搜寻专家 更新时间:2023-10-30 20:23:06 24 4
gpt4 key购买 nike

我想知道是否有人可以指出如何在核心数据实体中的属性上设置自动递增的方向。我知道索引复选框只会为搜索和查找速度索引字段。

我也知道我必须在代码中执行此操作,但我不确定如何获取最后/最高 ID 来设置新对象 ID。几年前我找到了如何做,但再也找不到了。

我对 Objective-C 的了解非常有限,对 coredata 的了解更是如此。此外,如果有人可以建议如何确保一个字段是唯一的,例如名称字段,那就太好了。

我的密码是here如果你想看看我到目前为止做了什么。该项目是一个基本数据库,其中包含零件、位置和工具。它只完成了一部分,基本上是我个人电子套件的一个小型数据库。我敢肯定有一些应用程序可以做到这一点,但当你自己动手时,它总是更好

最佳答案

我不太确定 id 在您的应用程序中的作用,但我的第一个观察是您的数据模型中的所有实体都有一个名称和一个 id,因此它们可能应该有一个抽象的 super 实体来包含姓名和身份证。除此之外,您可以像这样检索集合中的最大 ID:

Category *cat = /* get a category  */;
NSSet *parts = cat.parts;
NSNumber *maxID = [parts valueForKeyPath:@"@max.id"];

对于类别的 ID,您可以对所有类别执行提取请求,然后在返回的数组上使用此技术。我不知道您是想让每个模型对象的 ID 保持唯一,还是希望 ID 从 0 开始添加到每个实体的第一个对象。

要确保字段是唯一的,您可以使用托管对象验证。这在 Core Data Programming Guide 中有描述,在 Model Object Implementation Guide 中有更详细的描述。确保名称是唯一的将需要您针对 validateName:error: 方法中的所有名称对其进行测试。制作一个抽象的 super 实体将使这变得容易得多。为此,您需要获取抽象 super 实体中对象的所有名称,并根据要验证的值对它们进行测试。

编辑:如果您使用抽象 super 实体,那么您应该获取抽象 super 实体中对象的最大 ID(如果您希望它们是唯一的)。另外正如其他人指出的那样,托管对象的 objectID 是它的唯一标识符,它始终是相同的,但是查看应用程序我认为这并不是您真正想要的,因为它们将是计算机编号而不是在创建新对象时增加已知的最高 id 的更友好的结果。您应该在 awakeFromInsert 中设置对象 ID 的另一件事,以便仅在创建对象时调用它。

关于objective-c - Core Data (Mac) 如何在 ID 字段上实现自增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4731503/

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