gpt4 book ai didi

swift - CloudKit,加入或将项目添加到列表的有效方法

转载 作者:可可西里 更新时间:2023-11-01 02:14:07 25 4
gpt4 key购买 nike

我正在使用 CloudKit 来管理消息列表(带有字段标题和正文的记录类型消息)。所有消息都是公开的,我想维护用户使用移动应用程序阅读的消息。

应用程序可以有数以千计的用户和消息。我使用swift3。

我想过不同的方法,但它们在性能方面似乎很差:

  • 在Message 中添加一个'readers' 字段,它是用户Id 对应的字符串列表。问题是如果我想添加一个新的用户 ID,我必须加载所有列表。如果有很多用户阅读了消息,这对于移动应用程序来说是有问题的。我可以在不下载所有列表的情况下延迟获取列表字段并为其添加值吗(就像在经典 Orm 中一样)?
  • 添加另一个记录类型“Reader”,它有两个字段:用户 ID 和消息 ID。我找不到在谓词中加入 Message 和 Reader 以仅下载用户尚未阅读的 Message 的方法。这可能吗?
  • As suggested by Matthew : 在私有(private)数据库中添加一条记录类型 ReadArticle,它只存储一条消息的 CKReference。问题是我们需要先下载所有消息 ID,然后再以 NOT 谓词发送它们。

我不知道如何用像 CloudKit 这样的数据库来解决这个问题。

有什么建议吗?

最佳答案

读者领域

由于您指出的确切原因,这种方法并不理想,而且它也不安全,因为 String 理论上可以包含任何内容。

读者对象

即使有办法让它工作,您也会将用户 ID 存储在公共(public)数据库中。这可能不是一件注重隐私的事情。

私有(private)数据库中的ReadMessage记录

假设您有一个名为 ReadArticle 的记录类型。此对象将只包含一个字段,即 CKReferenceMessage 记录。

然后,当有人阅读Message 时,您获取该MessagerecordId,创建一个CKReference从它,并将该引用放置在 ReadMessage 类型的新 CKRecord 对象的“消息”字段中。然后,将其保存到用户的私有(private)数据库中。因为它是一个 CKReference,所以它实际上几乎不会占用 iCloud 中的任何空间,因为它只是一个指针,而且因为您将使用用户的私有(private)数据库,所以无需明确识别用户。

然后当你想要所有未读消息时,获取 ReadMessage 记录,并创建一个 NOT 谓词来接收所有 Message 记录,其中记录 id 不是任何已读消息那些。 CloudKit 绝对支持 NOT 谓词,但如果它碰巧不支持 NOT 谓词指定记录 ID,那么您可以在消息上使用其他一些唯一字段。

关于swift - CloudKit,加入或将项目添加到列表的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39779886/

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