Используя атрибуты актива и расположения

CloudKit обеспечивает типы атрибута в частности для хранения больших файлов данных и для выборки записей расположением. Используйте эти типы данных для усиления повышений производительности, что CloudKit предусматривает этот тип данных. Можно также выбрать записи расположением. Например, выведите на экран записи на карте в определяемой пользователем области.

Храните большие файлы в CloudKit

Можно сохранить большие файлы данных в CloudKit с помощью Asset тип атрибута. Активы принадлежат связанной записи, и CloudKit обрабатывает сборку «мусора» для Вас. CloudKit также эффективно загружает и загружает активы.

В коде, Asset тип атрибута представлен a CKAsset объект. Этот фрагмент кода устанавливает Asset атрибут в Artwork запишите к файлу ресурсов.

   // Create a URL to the local file
   NSURL *resourceURL = [NSURL fileURLWithPath:@"…"];
   if (resourceURL){
      CKAsset *asset = [[CKAsset alloc] initWithFileURL:resourceURL];
      artworkRecord[@"image"] = asset;
   }

Когда запись сохраняется, файл загружается на iCloud.

Добавьте подобный код, сохраняющий тип записи с Asset припишите своему приложению и выполните его. Для сохранения записи читайте, Сохраняют Записи.

Проверьте свои шаги

Чтобы проверить, что Ваши изменения в схеме и записях были сохранены к iCloud, считайте Типы записи Представления при помощи Записей Инструментальной панели и Представления CloudKit Используя Инструментальную панель CloudKit. Когда Вы просматриваете записи с Asset объект, Инструментальная панель CloudKit выводит на экран размер двоичных данных. Дополнительно, загрузите или удалите двоичных данных из записи.

../Art/6_asset_attribte_2x.png../Art/6_asset_attribte_2x.png

Добавьте атрибуты расположения

Если Ваша запись имеет адрес или другие данные расположения, можно сохранить его как a CLLocation объект в рекордной и более поздней выборке записывает расположением. Например, Ваше приложение могло бы вывести на экран контакты, представляющие записи на карте.

Этот фрагмент кода использует CLGeocoder класс для преобразования строкового адреса в объект расположения и хранилища это в записи.

CLGeocoder *geocoder = [CLGeocoder new];
[geocoder geocodeAddressString:artwork[kArtworkAddressKey] completionHandler:^(NSArray *placemark, NSError *error){
   if (!error) {
      if (placemark.count > 0){
         CLPlacemark *placement = placemark[0];
         artworkRecord[kArtworkLocationKey] = placement.location;
      }
   }
   else {
      // insert error handling here
   }
   // Save the record to the database
}];

Добавьте подобный код, сохраняющий тип записи с Location припишите своему приложению и выполните его. Для сохранения записи читайте, Сохраняют Записи.

Проверьте свои шаги

При просмотре записей в Инструментальной панели CloudKit она выводит на экран долготу и широту атрибутов расположения.

../Art/6_location_attribte_2x.png../Art/6_location_attribte_2x.png

Записи выборки расположением

Как только у Вас есть данные расположения в Вашей базе данных, можно выбрать записи расположением с помощью запроса, содержащего тип записи, предикат и дескриптор вида. Location атрибут, указанный в предикате, должен быть индексирован для выборки для работы. (Атрибуты индексируются по умолчанию.)

Этот фрагмент кода выбирает все записи, расположения которых в 250 000 метров Сан-Франциско.

// Get the public database object
CKDatabase *publicDatabase = [[CKContainer containerWithIdentifier:[CKContainer defaultContainer]] publicCloudDatabase];
 
// Create a predicate to retrieve records within a radius of the user's location
CLLocation *fixedLocation = [[CLLocation alloc] initWithLatitude:37.7749300 longitude:-122.4194200];
CGFloat radius = 2500000; // meters
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"distanceToLocation:fromLocation:(location, %@) < %f", fixedLocation, radius];
 
// Create a query using the predicate
CKQuery *query = [[CKQuery alloc] initWithRecordType:@"Artwork" predicate:predicate];
 
// Execute the query
[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
   }
}];

В этом приложении для iOS выбираются иллюстрации в указанном радиусе фиксированного расположения.

../Art/6_fetching_by_location_2x.png

Для узнавания больше о расположениях и картах считайте Руководство по программированию Карт и Расположение.

Резюме

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