ios - 如何使用 CloudKit 将记录添加到记录类型的引用列表?

标签 ios swift cloudkit

我有两个简单的记录类型:ArtworkArtistArtwork 作为一个 child 可能属于一个 Artist,但是一个Artist 可能有多个艺术品。

以下是与上述记录类型相关的屏幕截图。

enter image description here enter image description here

我可以通过以下方式简单地为 artwork 设置 artist:

let artistID = CKRecordID(recordName: "F297D690-888B-4B55-9FBD-27CAEF4BBD83")
let artworkID = CKRecordID(recordName: self.idTextField.text!)

self.container.publicCloudDatabase.fetchRecordWithID(artworkID, completionHandler: { artwork, error in

    if let artwork = artwork {

        artwork["artist"] = CKReference(recordID: artistID, action: CKReferenceAction.None)
        self.container.publicCloudDatabase.saveRecord(artwork, completionHandler: { artwork, error in

             print("done")
        })
    }
})

但问题是:

如何设置反向关系?换句话说,如何将 artworkID 添加到 artistID 的引用列表中?

苹果说:

...to represent the one-to-many relationship from Artist to Collection in the object model, add a reference field to the Collection record.

但是如何做到这一点呢?

最佳答案

这是我找到的最简单的答案:

let artworkID = CKRecordID(recordName: self.idTextField.text!)
if let artist = artist, var artworks = artist["artworks"] as? [CKReference] {

    let reference = CKReference(recordID: artworkID, action: CKReferenceAction.None)
    if !artworks.contains(reference) {
        artworks.append(reference)
    }
    artist["artworks"] = artworks

    //here you can save your changes or do whatever it needs
}

关于ios - 如何使用 CloudKit 将记录添加到记录类型的引用列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36862404/

相关文章:

ios - 在 Swift 中隐藏 TabbedBarController 上的后退按钮

ios - "The user is blocked from live streaming."(域=com.google.GTLRErrorObjectDomain代码=403)

ios - 显示在 iOS 应用程序中打开的 PDF 内容 (Swift)

ios - 快速加入多个关系

ios - NSUbiquityIdentityDidChangeNotification 不起作用?

ios - 在嵌套 block 中使用常量值时,Swift 1.2 会被破坏

ios - applicationDidBecomeActive 是否 : block the main thread?

swift iOS : Serial Function Execution

ios - PromiseKit 和 CloudKit 保存(使用 Swift)

ios - CloudKit 离线同步