gpt4 book ai didi

cocoa - Core Data 中线程安全的唯一实体实例

转载 作者:行者123 更新时间:2023-12-03 16:13:56 25 4
gpt4 key购买 nike

我有一个具有 messageID 属性的消息实体。我想确保只有一个具有给定 messageID 的 Message 实体实例。在 SQL 中,我只是向 messageID 列添加唯一约束,但我不知道如何使用 Core Data 来执行此操作。我不相信它可以在数据模型本身中完成,那么你该如何去做呢?

我最初的想法是使用验证方法在 NSManagedObject 的上下文中获取 ID,看看它是否找到除自身以外的任何内容,如果是,则验证失败。我怀疑这会起作用 - 但我担心类似的东西的性能。我做了很多努力来最大限度地减少整个导入例程所需的获取请求,并且通过对每个新消息实体执行获取来验证它似乎有点过多。在执行将所有内容导入和连接在一起的实际工作之前,我只需使用两个获取查询即可获取所需的所有预先存在的对象,并识别需要插入到存储中的所有新对象。除了这两个之外,这将为每个更新或插入添加一个提取 - 这似乎消除了我通过首先预处理导入数据而获得的任何性能优势!

这是一个问题的主要原因是导入器可以(可能)在多个线程上同时运行多个批处理,并且可能包含一些重叠/重复的数据,这些数据最终需要在存储中生成一个对象而不是重复的条目。有没有合理的方法来做到这一点,并且我所要求的对核心数据有意义吗?

最佳答案

保证唯一性的唯一方法是进行提取。幸运的是,您可以执行 -countForFetchRequest:error: 并检查它是否为零。这是目前保证唯一性的最便宜的方法。

您可以在验证中完成此操作,或在处理数据的循环中运行它。就我个人而言,我会在创建 NSManagedObject 之上执行此操作,以便在记录已存在时不会进行不必要的分配。

关于cocoa - Core Data 中线程安全的唯一实体实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2181997/

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