Выборка записей

После сохранения записей на базу данных можно получить их использующий различные механизмы. Выберите отдельные записи рекордным 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
        }
    }];

В приложении Галереи только выбираются иллюстрации указанного художника.

../Art/5_fetching_by_attribute_2x.png

Резюме

В этой главе Вы учились как: