CKReference на CloudKit с использованием Swift
У меня есть RecordType Account
и еще один Friends
, За Account
Я устанавливаю RecordID
на создание каждой записи и у меня есть столбец Name
,
Для друзей у меня есть две колонки, Me
а также MyFriend
, MyFriend
Справочник, содержащий RecordID
учетной записи.
Как я могу получить имена учетных записей, которые являются моими друзьями? Мне нужно запросить друзей, чтобы получить все записи, где Me
мой RecordID
и затем мне нужно использовать эти ссылки на записи, чтобы получить имена из таблицы Account.
Я пробовал следующее, но я не получил результатов:
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)`
1 ответ
Решение
Если MyFriend является CKReference, то вам следует привести его не к строке, а к CKReference, а затем получить его recordID.recordName. Так что код будет выглядеть так:
var myFriend = friend.objectForKey("MyFriend") as CKReference
var key = myFriend.recordID.recordName