CloudKit - 在 CKRecord 中存储多个 CKReference

Posted

技术标签:

【中文标题】CloudKit - 在 CKRecord 中存储多个 CKReference【英文标题】:CloudKit - Storing multiple CKReferences in a CKRecord 【发布时间】:2015-04-14 16:31:19 【问题描述】:

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

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

【问题讨论】:

为什么这个问题被否决了? 为什么?良好的内容,密集的介绍。为了使其更具可扫描性,您可以:(1)无情地删除不必要的词(“有用”≠“必要”),(2)通过项目符号或编号列表格式直观地构建您的问题以反映逻辑结构,以及,(3)使用隐喻或具体示例而不是抽象泛型(RecordTypeA 或 B)。相反,请使用反映对象性质的名称(例如,“UserActivityRecordType”和“SelfyImageReference”与“AvatarImageReference”)。注意:我没有投反对票。 【参考方案1】:

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

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

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

【讨论】:

谢谢埃德温。这与我开始做的事情一样......检查每个引用的recordID是否为零。如果 recordTypeA 的 recordID 为 nil,那么我知道它是 recordTypeB 记录,反之亦然。但这仍然有点问题,所以我将 UA 记录类型拆分为 2 个不同的记录……一个存储对 recordTypeA 的引用,另一个存储对 recordTypeB 的引用。我本来希望我的原始方法使用一个记录类型来存储两种引用类型,但是当它只包含一个引用时会容易得多。

以上是关于CloudKit - 在 CKRecord 中存储多个 CKReference的主要内容,如果未能解决你的问题,请参考以下文章

在 Cloudkit 中创建 CKRecord?

为啥我无法访问 CloudKit 中 CKRecord 的 createdAt 字段?

快速从 Cloudkit 中删除 CKRecord

单个 CKRecord 中的一系列 CKAsset 是不是存在问题?

在 CloudKit 中创建指向多个 CKRecord 的引用列表

无法从 CloudKit 通知信息和用户信息结构中获取 CKRecord.ID