使用 Swift 在 CloudKit 上进行 CKReference

CKReference on CloudKit using Swift

我有一个 RecordType Account 和另一个 Friends。 对于 Account 我在创建每条记录时设置 RecordID 并且我有一列 Name.

对于朋友,我有两列,MeMyFriendMyFriend 是包含帐户 RecordID 的引用。

如何检索我的好友帐户名称? 我需要查询 Friends 以获取 Me 是我的 RecordID 的所有记录,然后我需要使用这些记录的引用从帐户 table.

我尝试了以下方法,但没有得到任何结果:

let predicate = NSPredicate(format: "Me = %@", recordID)
let query = CKQuery(recordType: "Friends", predicate: predicate)
publicDB.performQuery(query, inZoneWithID: nil) { (results, error) -> Void in
    if error != nil {
        println("Error fetching from Friends table: \(error.description)")
    } else {
        for friend in results {
            var key = friend.objectForKey("MyFriend") as String
            self.publicDB.fetchRecordWithID(CKRecordID(recordName: key), completionHandler: { (record, error) -> Void in
                if error != nil {
                    println(error.description)
                } else {
                    self.friends.append(record.objectForKey("Name") as String)
                }
            })
        }
        dispatch_semaphore_signal(self.semaphore)
    }
 }
 dispatch_semaphore_wait(self.semaphore, DISPATCH_TIME_FOREVER)`

如果 MyFriend 是一个 CKReference,那么您不应将其转换为字符串,而应转换为 CKReference,然后获取它 recordID.recordName。所以该代码将如下所示:

var myFriend = friend.objectForKey("MyFriend") as CKReference
var key = myFriend.recordID.recordName