Используя атрибуты актива и расположения
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 выводит на экран размер двоичных данных. Дополнительно, загрузите или удалите двоичных данных из записи.


Добавьте атрибуты расположения
Если Ваша запись имеет адрес или другие данные расположения, можно сохранить его как 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 она выводит на экран долготу и широту атрибутов расположения.


Записи выборки расположением
Как только у Вас есть данные расположения в Вашей базе данных, можно выбрать записи расположением с помощью запроса, содержащего тип записи, предикат и дескриптор вида. 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 выбираются иллюстрации в указанном радиусе фиксированного расположения.

Для узнавания больше о расположениях и картах считайте Руководство по программированию Карт и Расположение.
Резюме
В этой главе Вы учились как:
Добавьте
Asset
введите к типу записи путем добавления aCKAsset
припишите записи и сохранению записиДобавьте a
Location
введите к типу записи с помощью aCLLocation
объектВыборка возражает расположением