CKDatabase
A CKDatabase
объект является кабелепроводом для доступа к общедоступным и частным данным контейнера приложения. Каждый контейнер имеет общедоступную базу данных, данные которой доступны для всех пользователей и частной базы данных, данные которой доступны только для текущего пользователя по умолчанию. Объект базы данных берет запросы на данные и применяет их к надлежащей части контейнера.
Вы не создаете объекты базы данных сами, и при этом Вы не должны разделять на подклассы CKDatabase
. Ваше приложение CKContainer
объекты обеспечивают объекты базы данных, которые Вы используете для доступа к связанным данным. Используйте объекты базы данных как есть для выполнения операций на данных.
Общедоступная база данных всегда доступна, независимо от того, имеет ли устройство активную учетную запись iCloud. Когда никакая учетная запись iCloud не доступна, Ваше приложение может выбрать записи и выполнить запросы на общедоступной базе данных, но это может не сохранить изменения. (Сохраняющие записи на общедоступную базу данных требуют, чтобы активная учетная запись iCloud идентифицировала владельца тех записей.) Доступ к частной базе данных всегда требует активной учетной записи iCloud на устройстве.
Взаимодействие с объектами базы данных
Вы взаимодействуете с объектами базы данных следующим образом:
Присвойте объект базы данных объекту операции, когда Вы захотите выбрать, сохранить, удалить и запросить содержание базы данных. Объект базы данных говорит объект операции, где получить данные. (Вызов
addOperation:
метод базы данных присваивает ту базу данных объекту операции неявно.Используйте удобные методы объекта базы данных выбрать, сохранить, удалить, и запросить содержание базы данных непосредственно. Удобные методы действуют только на один элемент за один раз.
Используя базы данных с объектами операции
Для объектов операции то убывание от CKDatabaseOperation
класс, укажите объект базы данных для использования при выполнении работы.
При выполнении операций на собственной очереди укажите базу данных явно путем присвоения надлежащего
CKDatabase
возразите против объекта операцииdatabase
свойство.Если у Вас нет своей собственной очереди, выполните объект операции против базы данных неявно путем вызова
addOperation:
метод.
Выполнение задач против базы данных непосредственно
CKDatabase
класс предлагает удобные методы для доступа к записям, рекордным зонам и подпискам без объекта операции. Удобные методы позволяют Вам выбирать, сохранять, или удалять единственный элемент асинхронно и обрабатывать результаты на фоновом потоке. Существует также удобный метод искать записи в базе данных.
Оператор импорта
Swift
import CloudKit
Objective C
@import CloudKit;
Доступность
Доступный в OS X v10.10 и позже.
-
Ищет указанную зону асинхронно записи, соответствующие параметры запроса.
Объявление
Swift
func performQuery(_
query
: CKQuery!, inZoneWithIDzoneID
: CKRecordZoneID!, completionHandlercompletionHandler
: (([AnyObject]!, NSError!) -> Void)!)Objective C
- (void)performQuery:(CKQuery *)
query
inZoneWithID:(CKRecordZoneID *)zoneID
completionHandler:(void (^)(NSArray *results, NSError *error))completionHandler
Параметры
query
Объект запроса, содержащий параметры для поиска. Если этот параметр, этот метод выдает исключение
nil
. Для получения информации о том, как создать запросы, см. Ссылку класса CKQuery.zoneID
ID зоны для поиска. Результаты поиска ограничиваются записями в указанной зоне. Указать
nil
искать зону по умолчанию базы данных.completionHandler
Блок для выполнения с результатами поиска. Ваш блок должен быть способен к работе любого потока приложения и взять следующие параметры:
results
Массив, содержащий нуль или больше
CKRecord
объекты. Возвращенные записи соответствуют записям в указанной зоне, соответствующим параметры запроса.error
Ошибочный объект, или
nil
если запрос был завершен успешно. Используйте информацию в ошибочном объекте определить, имеет ли проблема обходное решение.Обсуждение
Используйте этот метод для выполнения поисков против текущей базы данных.
Не используйте этот метод, когда число возвращенных записей будет потенциально больше чем несколькими сотнями записей. Для эффективности все запросы автоматически ограничивают число возвращенных записей на основе существующих условий. Если Ваш запрос поражает максимальное значение, этот метод возвращает только первую часть полных результатов. Число возвращенных записей должно быть достаточным в большинстве случаев, но получить весь набор записей необходимо использовать a
CKQueryOperation
объект вместо этого. Операции запроса также возвращают максимальное количество результатов, но когда они делают, они обеспечивают, курсор возражают, что можно использовать для выборки следующего пакета результатов.Можно искать любое содержание, представленное a
CKRecord
объект, включая пользовательские записи. Вы не можете использовать этот метод для поискаCKSubscription
илиCKRecordZone
объекты.Оператор импорта
Objective C
@import CloudKit;
Swift
import CloudKit
Доступность
Доступный в OS X v10.10 и позже.
-
Выполняет указанную работу асинхронно против текущей базы данных.
Объявление
Swift
func addOperation(_
operation
: CKDatabaseOperation!)Objective C
- (void)addOperation:(CKDatabaseOperation *)
operation
Параметры
operation
Объект операции для выполнения. Необходимо сконфигурировать объект операции с любыми зависимостями и обработчиками завершения прежде, чем вызвать этот метод. Для операций, включающих записи, все записи, действующий на объектом операции, должны находиться в той же зоне. Если этот параметр
nil
, метод ничего не делает.Обсуждение
Не изменяйте свойства объекта операции после вызова этого метода. До выполнения работы этот метод устанавливает объект операции
database
свойство к текущей базе данных, заменяя любую ранее присвоенную базу данных.Этот метод выполняет объект операции с приоритетом, который Вы присвоили объекту через
queuePriority
свойство.Оператор импорта
Objective C
@import CloudKit;
Swift
import CloudKit
Доступность
Доступный в OS X v10.10 и позже.
-
Выборки одна запись асинхронно от текущей базы данных.
Объявление
Swift
func fetchRecordWithID(_
recordID
: CKRecordID!, completionHandlercompletionHandler
: ((CKRecord!, NSError!) -> Void)!)Objective C
- (void)fetchRecordWithID:(CKRecordID *)
recordID
completionHandler:(void (^)(CKRecord *record, NSError *error))completionHandler
Параметры
recordID
ID записи Вы хотите выбрать. Если этот параметр, этот метод выдает исключение
nil
.completionHandler
Блок для выполнения с результатами. Ваш блок должен быть способен к работе любого потока приложения и взять следующие параметры:
record
Требуемый рекордный объект. Если никакая такая запись не найдена, этот параметр
nil
.error
Ошибочный объект, или
nil
если запись была выбрана успешно. Используйте информацию в ошибочном объекте определить, имеет ли проблема обходное решение.Обсуждение
Используйте этот метод для выборки записей, которые не являются срочными к выполнению приложения. Этот метод выбирает запись с низким приоритетом, который может вызвать задачу выполниться после задач более высокого приоритета. Для выборки записей более срочно создайте a
CKFetchRecordsOperation
объект с желаемым приоритетом. Можно также использовать тот объект операции для выборки многократных записей одновременно.Оператор импорта
Objective C
@import CloudKit;
Swift
import CloudKit
Доступность
Доступный в OS X v10.10 и позже.
-
Сохраняет одну запись асинхронно на текущую базу данных.
Объявление
Параметры
record
Запись для сохранения. Если этот параметр, этот метод выдает исключение
nil
.completionHandler
Блок для выполнения с результатами. Ваш блок должен быть способен к работе любого потока приложения и взять следующие параметры:
record
Рекордный объект Вы попытались сохранить.
error
Ошибочный объект, или
nil
если запись была сохранена успешно. Используйте информацию в ошибочном объекте определить, имеет ли проблема обходное решение.Обсуждение
Этот метод сохраняет запись, только если это никогда не сохранялось прежде или если это является более новым, чем версия на сервере. Вы не можете использовать этот метод для перезаписи более новых версий записи на сервере.
Этот метод сохраняет запись с низким приоритетом, который может вызвать задачу выполниться после задач более высокого приоритета. Для сохранения записей более срочно создайте a
CKModifyRecordsOperation
объект с желаемым приоритетом. Можно также использовать тот объект операции для сохранения многократных записей одновременно.Оператор импорта
Objective C
@import CloudKit;
Swift
import CloudKit
Доступность
Доступный в OS X v10.10 и позже.
-
Удаляет указанную запись асинхронно из текущей базы данных.
Объявление
Swift
func deleteRecordWithID(_
recordID
: CKRecordID!, completionHandlercompletionHandler
: ((CKRecordID!, NSError!) -> Void)!)Objective C
- (void)deleteRecordWithID:(CKRecordID *)
recordID
completionHandler:(void (^)(CKRecordID *recordID, NSError *error))completionHandler
Параметры
recordID
ID записи Вы хотите удалить. Если этот параметр, этот метод выдает исключение
nil
.completionHandler
Блок для выполнения с результатами. Ваш блок должен быть способен к работе любого потока приложения и взять следующие параметры:
recordID
ID записи Вы попытались удалить.
error
Ошибочный объект, или
nil
если запись была удалена успешно. Используйте информацию в ошибочном объекте определить, имеет ли проблема обходное решение.Обсуждение
Если на запись сослались другие записи, удаление записи может инициировать дополнительные удаления. Этот метод сообщает только о ID записи, которую Вы попросили удалять. CloudKit не сообщает об удалениях, инициированных путем владения отношениями между записями.
Этот метод удаляет запись с низким приоритетом, который может вызвать задачу выполниться после задач более высокого приоритета. Для удаления записей более срочно создайте a
CKModifyRecordsOperation
объект с желаемым приоритетом. Можно также использовать тот объект операции для удаления многократных записей одновременно.Оператор импорта
Objective C
@import CloudKit;
Swift
import CloudKit
Доступность
Доступный в OS X v10.10 и позже.
-
Выборки все рекордные зоны асинхронно от текущей базы данных.
Объявление
Swift
func fetchAllRecordZonesWithCompletionHandler(_
completionHandler
: (([AnyObject]!, NSError!) -> Void)!)Параметры
completionHandler
Блок для выполнения с результатами. Ваш блок должен быть способен к работе любого потока приложения и взять следующие параметры:
zones
Массив
CKRecordZone
объекты. Возвращенный массив всегда содержит по крайней мере одну рекордную зону, соответствующую зоне по умолчанию.error
Ошибочный объект, или
nil
если рекордные зоны были выбраны успешно. Используйте информацию в ошибочном объекте определить, имеет ли проблема обходное решение.Обсуждение
Используйте этот метод для определения местоположения рекордных зон в этой базе данных. Рекордные зоны представляют группы записей с общей целью.
Этот метод выбирает рекордные зоны с низким приоритетом, который может вызвать задачу выполниться после задач более высокого приоритета. Для выборки рекордных зон более срочно создайте a
CKFetchRecordZonesOperation
объект с желаемым приоритетом.Оператор импорта
Objective C
@import CloudKit;
Swift
import CloudKit
Доступность
Доступный в OS X v10.10 и позже.
-
Выборки одна рекордная зона асинхронно от текущей базы данных.
Объявление
Swift
func fetchRecordZoneWithID(_
zoneID
: CKRecordZoneID!, completionHandlercompletionHandler
: ((CKRecordZone!, NSError!) -> Void)!)Objective C
- (void)fetchRecordZoneWithID:(CKRecordZoneID *)
zoneID
completionHandler:(void (^)(CKRecordZone *zone, NSError *error))completionHandler
Параметры
zoneID
ID рекордной зоны. Если этот параметр, этот метод выдает исключение
nil
.completionHandler
Блок для выполнения с результатами. Ваш блок должен быть способен к работе любого потока приложения и взять следующие параметры:
zone
Требуемый
CKRecordZone
объект илиnil
если объект не найден или не может быть получен.error
Ошибочный объект, или
nil
если рекордная зона была выбрана успешно. Используйте информацию в ошибочном объекте определить, имеет ли проблема обходное решение.Обсуждение
Используйте этот метод для получения рекордной зоны, ID которой Вы уже знаете. Вы могли бы получить рекордный зональный объект так, чтобы можно было оценить его возможности.
Этот метод выбирает рекордную зону с низким приоритетом, который может вызвать задачу выполниться после задач более высокого приоритета. Для выборки рекордной зоны более срочно создайте a
CKFetchRecordZonesOperation
объект с желаемым приоритетом. Можно также использовать тот объект операции для выборки многократных рекордных зон одновременно.Оператор импорта
Objective C
@import CloudKit;
Swift
import CloudKit
Доступность
Доступный в OS X v10.10 и позже.
-
Сохраняет одну рекордную зону асинхронно к текущей базе данных.
Объявление
Swift
func saveRecordZone(_
zone
: CKRecordZone!, completionHandlercompletionHandler
: ((CKRecordZone!, NSError!) -> Void)!)Objective C
- (void)saveRecordZone:(CKRecordZone *)
zone
completionHandler:(void (^)(CKRecordZone *zone, NSError *error))completionHandler
Параметры
zone
Зона Вы хотите сохранить к базе данных. Если этот параметр, этот метод выдает исключение
nil
.completionHandler
Блок для выполнения с результатами. Ваш блок должен быть способен к работе любого потока приложения и взять следующие параметры:
zone
CKRecordZone
возразите, что Вы попытались сохранить.error
Ошибочный объект, или
nil
если рекордная зона была сохранена успешно. Используйте информацию в ошибочном объекте определить, имеет ли проблема обходное решение.Обсуждение
Используйте этот метод для сохранения рекордной зоны к базе данных так, чтобы можно было впоследствии сохранить записи в нем. Рекордные зоны должны быть сохранены, прежде чем Вы попытаетесь сохранить любые записи, находящиеся в той зоне. Поскольку этот метод выполняется асинхронно, используйте обработчик завершения, чтобы проверить, что зона была сохранена успешно прежде, чем попытаться сохранить любые записи.
Этот метод сохраняет рекордную зону с низким приоритетом, который может вызвать задачу выполниться после задач более высокого приоритета. Для сохранения рекордной зоны более срочно создайте a
CKModifyRecordZonesOperation
объект с приоритетом Вы хотите. Можно также использовать тот объект операции для сохранения многократных рекордных зон одновременно.Оператор импорта
Objective C
@import CloudKit;
Swift
import CloudKit
Доступность
Доступный в OS X v10.10 и позже.
-
Удаляет одну рекордную зону (и ее содержание) асинхронно от текущей базы данных.
Объявление
Swift
func deleteRecordZoneWithID(_
zoneID
: CKRecordZoneID!, completionHandlercompletionHandler
: ((CKRecordZoneID!, NSError!) -> Void)!)Objective C
- (void)deleteRecordZoneWithID:(CKRecordZoneID *)
zoneID
completionHandler:(void (^)(CKRecordZoneID *zoneID, NSError *error))completionHandler
Параметры
zoneID
ID зоны Вы хотите удалить. Если этот параметр, этот метод выдает исключение
nil
.completionHandler
Блок для выполнения с результатами. Ваш блок должен быть способен к работе любого потока приложения и взять следующие параметры:
zoneID
ID зоны, которую Вы попытались удалить.
error
Ошибочный объект, или
nil
если рекордная зона была удалена успешно. Используйте информацию в ошибочном объекте определить, имеет ли проблема обходное решение.Обсуждение
Удаление зоны постоянно удаляет зону и все записи в той зоне. После удаления зоны можно использовать тот же ID для создания новой пустой зоны.
Этот метод удаляет рекордную зону с низким приоритетом, который может вызвать задачу выполниться после задач более высокого приоритета. Для удаления рекордной зоны более срочно создайте a
CKModifyRecordZonesOperation
объект с желаемым приоритетом. Можно также использовать тот объект операции для удаления многократных рекордных зон одновременно.Оператор импорта
Objective C
@import CloudKit;
Swift
import CloudKit
Доступность
Доступный в OS X v10.10 и позже.
-
Выборки вся подписка возражают асинхронно от текущей базы данных.
Объявление
Swift
func fetchAllSubscriptionsWithCompletionHandler(_
completionHandler
: (([AnyObject]!, NSError!) -> Void)!)Параметры
completionHandler
Блок для выполнения с результатами. Ваш блок должен быть способен к работе любого потока приложения и взять следующие параметры:
subscriptions
Массив
CKSubscription
объекты. Если объекты подписки не могут быть получены, массив пуст.error
Ошибочный объект, или
nil
если подписки были выбраны успешно. Используйте информацию в ошибочном объекте определить, имеет ли проблема обходное решение.Обсуждение
Используйте этот метод для определения местоположения подписок в текущей базе данных. Подписки представляют персистентные запросы на сервере. Когда записи изменяются, подписка может использоваться для предупреждения приложения.
Этот метод выбирает объекты подписки с низким приоритетом, который может вызвать задачу выполниться после задач более высокого приоритета. Для выборки подписок более срочно создайте a
CKFetchSubscriptionsOperation
объект с желаемым приоритетом.Оператор импорта
Objective C
@import CloudKit;
Swift
import CloudKit
Доступность
Доступный в OS X v10.10 и позже.
-
Выборки одна подписка возражают асинхронно от текущей базы данных.
Объявление
Swift
func fetchSubscriptionWithID(_
subscriptionID
: String!, completionHandlercompletionHandler
: ((CKSubscription!, NSError!) -> Void)!)Objective C
- (void)fetchSubscriptionWithID:(NSString *)
subscriptionID
completionHandler:(void (^)(CKSubscription *subscription, NSError *error))completionHandler
Параметры
subscriptionID
ID объекта подписки. Если этот параметр, этот метод выдает исключение
nil
.completionHandler
Блок для выполнения с результатами. Ваш блок должен быть способен к работе любого потока приложения и взять следующие параметры:
subscription
Требуемая подписка возражает или
nil
если объект не найден или не может быть получен.error
Ошибочный объект, или
nil
если подписка была выбрана успешно. Используйте информацию в ошибочном объекте определить, имеет ли проблема обходное решение.Обсуждение
Используйте этот метод для получения объекта подписки, ID которого Вы уже знаете. Вы могли бы получить объект подписки так, чтобы можно было оценить его атрибуты или обновить информацию об уведомлении, используемую для генерации предупреждений.
Этот метод выбирает объект подписки с низким приоритетом, который может вызвать задачу выполниться после задач более высокого приоритета. Для выборки подписки более срочно создайте a
CKFetchSubscriptionsOperation
объект с желаемым приоритетом. Можно также использовать тот объект операции для выборки многократных объектов подписки одновременно.Оператор импорта
Objective C
@import CloudKit;
Swift
import CloudKit
Доступность
Доступный в OS X v10.10 и позже.
-
Сохраняет один объект подписки асинхронно к текущей базе данных.
Объявление
Swift
func saveSubscription(_
subscription
: CKSubscription!, completionHandlercompletionHandler
: ((CKSubscription!, NSError!) -> Void)!)Objective C
- (void)saveSubscription:(CKSubscription *)
subscription
completionHandler:(void (^)(CKSubscription *subscription, NSError *error))completionHandler
Параметры
subscription
Объект подписки Вы хотите сохранить к базе данных. Если этот параметр, этот метод выдает исключение
nil
.completionHandler
Блок для выполнения с результатами. Ваш блок должен быть способен к работе любого потока приложения и взять следующие параметры:
subscription
Объект подписки Вы попытались сохранить.
error
Ошибочный объект, или
nil
если подписка была сохранена успешно. Используйте информацию в ошибочном объекте определить, имеет ли проблема обходное решение.Обсуждение
Используйте этот метод для сохранения подписки к базе данных так, чтобы это могло начать наблюдать за изменениями.
Этот метод сохраняет объект подписки с низким приоритетом, который может вызвать задачу выполниться после задач более высокого приоритета. Для сохранения подписки более срочно создайте a
CKModifySubscriptionsOperation
объект с желаемым приоритетом. Можно также использовать тот объект операции для сохранения многократных объектов подписки одновременно.Оператор импорта
Objective C
@import CloudKit;
Swift
import CloudKit
Доступность
Доступный в OS X v10.10 и позже.
-
Удалите один объект подписки асинхронно из текущей базы данных.
Объявление
Параметры
subscriptionID
ID подписки возражает для удаления. Если этот параметр, этот метод выдает исключение
nil
.completionHandler
Блок для выполнения с результатами. Ваш блок должен быть способен к работе любого потока приложения и взять следующие параметры:
subscriptionID
ID подписки возражает, что Вы попытались удалить.
error
Ошибочный объект, или
nil
если подписка была удалена успешно. Используйте информацию в ошибочном объекте определить, имеет ли проблема обходное решение.Обсуждение
Удаление подписки мешает ему наблюдать ее измененные записи и отправить предупреждения.
Этот метод удаляет объект подписки с низким приоритетом, который может вызвать задачу выполниться после задач более высокого приоритета. Для удаления подписки более срочно создайте a
CKModifySubscriptionsOperation
объект с желаемым приоритетом. Можно также использовать тот объект операции для удаления многократных объектов подписки одновременно.Оператор импорта
Objective C
@import CloudKit;
Swift
import CloudKit
Доступность
Доступный в OS X v10.10 и позже.