CloudKit - 在 CKRecord 中存储多个 CKReferences

CloudKit - Storing multiple CKReferences in a CKRecord

在我的应用程序中,我有一个记录类型 (UserActivity),它只存储用户想要保存到他们的个人资料中的图像。此记录类型仅包含一个属性 - 对另一个记录类型(例如 RecordTypeA)的 CKReference。它工作得很好......我能够通过引用存储和检索数据来构建图像并将其适当地显示在屏幕上。但是,我刚刚意识到我需要向 UserActivity 记录类型添加第二个属性,这将是对不同记录类型(称为 RecordTypeB)的 CKReference。记录类型B是第二种需要单独识别的图像。因此,UserActivity 中的每一行现在将具有 2 个可能的 CKReferences 中的 1 个,但不会同时具有两者。

我可以毫无问题地保存新的 RecordTypeB 引用,但是我遇到了几个问题。首先,当我保存它时,无论是通过代码还是 CKDashboard,记录现在显示标题为 "No Name",因为 RecordTypeA 的属性没有任何内容。最初,记录名称为 ref:followed-by-recordid。如果 UA 记录具有对 RecordTypeA 的引用,它会像最初那样工作。那么有没有办法让它只为 RecordTypeB 引用创建记录名称?既然我有第二个属性,我是否应该将其更改为 CKReference 列表?其次,更重要的是,当我检索 UserActivity 记录时,我如何判断给定记录是否包含对 RecordTypeA 或 RecordTypeB 的引用?有没有类似isKindOfClass方法的方法?在这种情况下,该方法仅显示它是一个 CKReference 而不是它引用的记录类型。如果 CKReference List 是合适的解决方案,也许第二个问题会自动解决?在此先感谢您的指导!

经验表明记录的标题将是您为该记录类型创建的第一个字段。我还没有找到关于此的任何文档,所以这可能是巧合。如果您希望您的标题是 RecordTypeB 字段,则重新创建您的 recordType,然后首先创建 RecordTypeB。没有其他方法可以影响标题。

您可以将其更改为 CKReference 列表,但我认为在您的情况下,保留 2 个单独的字段会更容易。只有当您不介意什么项目是什么时,您才应该使用列表。但在您的情况下,引用是 2 种不同的类型。

如果你没有写其中一个字段,那么当你读取记录并查看引用时,它应该是零。您不能询问 CKReference 的 recordType。但是,如果您为引用创建一个字段,那么您就知道它应该是什么记录类型。否则您需要创建一个额外的字段来指示它是什么记录类型。