Как получить все записи CloudKit, созданные текущим пользователем?
Скажем, у меня есть тип записи "Виды", который содержит публичные записи, созданные несколькими пользователями. В настоящее время мой запрос извлекает все записи 'Species':
private func fetchSpecies() {
// Fetch Public Database
let publicDatabase = CKContainer.defaultContainer().publicCloudDatabase
// Initialize Query
let query = CKQuery(recordType: "Species", predicate: NSPredicate(format: "TRUEPREDICATE"))
// Configure Query
query.sortDescriptors = [NSSortDescriptor(key: "latinName", ascending: true)]
// Perform Query
publicDatabase.performQuery(query, inZoneWithID: nil) { (records, error) -> Void in
dispatch_async(dispatch_get_main_queue(), { () -> Void in
// Process Response on Main Thread
self.processResponseForQuery(records, error: error)
})
}
}
Как я могу получить только те записи, которые были созданы текущим пользователем (как у владельца устройства)?
Спасибо!
2 ответа
Я также писал на форумах разработчиков Apple, и мне было предоставлено отличное решение:
Чтобы получить только определенные записи пользователя, вам нужно создать CKReference, указывающий на этот идентификатор пользователя (recordID), а затем использовать предикат для этого. Это выглядит так:
Сначала получите идентификатор записи пользователя
yourContainer.fetchUserRecordIDWithCompletionHandler { (userID, error) -> Void in
if let userID = userID {
// here's your userID (recordID) to play with
}
}
Затем создайте предикат:
let reference = CKReference(recordID: userID, action: .None)
let predicate = NSPredicate(format: "creatorUserRecordID == %@", reference)
let query = CKQuery(recordType: "Species", predicate: predicate)
А затем используйте запрос как обычно.
Удачной покупки!
Каждый CKRecord
имеет creatorUserRecordID
имущество; therefore, you can try to get owner's userRecordID
первый. Then, have it into NSPredicate
,
let container: CKContainer = CKContainer.defaultContainer()
let completionHandler: (CKRecordID?, NSError?) -> Void = { (userRecordID: CKRecordID?, error: NSError?) in
if let userRecordID = userRecordID {
let predicate = NSPredicate(format: "creatorUserRecordID == %@", userRecordID)
let query = CKQuery(recordType: "Species", predicate: predicate)
query.sortDescriptors = [NSSortDescriptor(key: "latinName", ascending: true)]
container.publicCloudDatabase.performQuery(query, inZoneWithID: nil) { (records, error) -> Void in
}
}
}
//// Returns the user record ID associated with the current user.
container.fetchUserRecordIDWithCompletionHandler(completionHandler)