Выборка записей
После сохранения записей на базу данных можно получить их использующий различные механизмы. Выберите отдельные записи рекордным ID или запрос для многих записей с помощью предиката. (Предикат определяет логические условия для поиска записей.) Как правило, Вы выбираете подмножество записей, чтобы вывести на экран пользователю в запуске и затем подписаться на изменения, интересующие пользователя.
Если Вы используете Location
припишите тип, можно также выбрать записи в географической области, как описано в Записях Выборки Расположением.
Записи выборки идентификатором
Если Вы знаете рекордный IDs для записей, Вы хотите выбрать, то можно выбрать отдельным рекордным ID. Например, этот фрагмент кода выбирает названную запись 115
.
CKDatabase *publicDatabase = [[CKContainer containerWithIdentifier:[CKContainer defaultContainer]] publicCloudDatabase]; |
CKRecordID *artworkRecordID = [[CKRecordID alloc] initWithRecordName:@"115"]; |
[publicDatabase fetchRecordWithID:artworkRecordID completionHandler:^(CKRecord *artworkRecord, NSError *error) { |
if (error) { |
// Error handling for failed fetch from public database |
} |
else { |
// Display the fetched record |
} |
}]; |
Выберите и измените записи
Можно выбрать, изменить и сохранить изменения, которые Вы вносите в отдельные записи. Этот фрагмент кода выбирает Artwork
запись, изменения date
значение атрибута, и сохраняет его к базе данных.
// Fetch the record from the database |
CKDatabase *publicDatabase = [[CKContainer containerWithIdentifier:[CKContainer defaultContainer]] publicCloudDatabase]; |
CKRecordID *artworkRecordID = [[CKRecordID alloc] initWithRecordName:@"115"]; |
[publicDatabase fetchRecordWithID:artworkRecordID completionHandler:^(CKRecord *artworkRecord, NSError *error) { |
if (error) { |
// Error handling for failed fetch from public database |
} |
else { |
// Modify the record and save it to the database |
NSDate *date = artworkRecord[@"date"]; |
artworkRecord[@"date"] = [date dateByAddingTimeInterval:30.0 * 60.0]; |
[publicDatabase saveRecord:artworkRecord completionHandler:^(CKRecord *savedRecord, NSError *saveError) { |
// Error handling for failed save to public database |
}]; |
} |
}]; |
Запрос для записей Используя предикаты
Если Вы имеете много записей и храните большие файлы в iCloud, маловероятно, что Вы хотите сохранить все записи локально на устройстве. Вместо этого Вы выбираете часть данных с помощью запроса. Запрос комбинирует тип записи, предикат и дескриптор вида, где предикат содержит индексирующиеся атрибуты. Вы создаете запрос в коде с помощью a CKQuery
объект.
Например, этот фрагмент кода выбирает все иллюстрации, где Мэй Чэнь является художником.
CKDatabase *publicDatabase = [[CKContainer containerWithIdentifier:[CKContainer defaultContainer]] publicCloudDatabase]; |
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"artist = %@", @"Mei Chen"]; |
CKQuery *query = [[CKQuery alloc] initWithRecordType:@"Artwork" predicate:predicate]; |
[publicDatabase performQuery:query inZoneWithID:nil completionHandler:^(NSArray *results, NSError *error) { |
if (error) { |
// Error handling for failed fetch from public database |
} |
else { |
// Display the fetched records |
} |
}]; |
В приложении Галереи только выбираются иллюстрации указанного художника.
Резюме
В этой главе Вы учились как:
Выборка записывает идентификатором
Выберите, измените и сохраните отдельные записи
Выберите многократные записи с помощью запроса и предиката