Spec-Zone .ru
спецификации, руководства, описания, API

Библиотека разработчика Mac

Разработчик

Ссылка платформы CloudKit ссылка класса CKReference

Опции
Развертывание Target:

На этой странице
Язык:

CKReference

A CKReference объект создает many-one отношение между записями в Вашей базе данных. Каждая ссылочная информация об объектно-ориентированных памятях об одной записи, которая является целью ссылки. Вы тогда сохраняете ссылочный объект в полях одной или более записей для создания ссылки от тех записей до цели. Обе записи должны быть расположены в той же зоне той же базы данных.

Ссылки создают более сильное отношение между записями, чем просто сохранение ID записи как строка. В частности можно использовать ссылки для создания модели владения между двумя записями. Когда действие ссылочного объекта установлено в CKReferenceActionDeleteSelf опция, цель ссылки — т.е. запись сохранена в ссылке recordID свойство — становится владельцем любых записей, относящихся к нему. Удаление цели (владелец), запись удаляет все записи, относящиеся к нему. (Удаление любых находящихся в собственности записей может инициировать дальнейшие удаления, если те записи являются самостоятельно владельцами других записей.), Если запись содержит два или больше CKReference объекты, действия которых установлены в CKReferenceActionDeleteSelf, когда любой из ее ссылочных объектов удален, запись удалена.

При сохранении записи, содержащей a CKReference объект в том, если его поля, сервер должен знать о цели ссылки. Попытки сохранить запись без первого сохранения ее целевой записи, на которую ссылаются, приводят к ошибке. Решение состоит в том, чтобы сохранить целевую запись сначала или сохранить обе записи с помощью того же CKModifyRecordsOperation объект.

Взаимодействие со ссылочными объектами

Вы используете ссылочные объекты создать прочные связи между двумя записями и искать смежные области. При создании новых записей Вы создаете ссылочные объекты и присваиваете их полям Ваших записей. Единственное другое время Вы создаете ссылочные объекты, - при создании поискового предиката для поиска связанных записей.

Соединение с другой записью

Чтобы соединить записи и создать прочные отношения между ними, создайте новое CKReference возразите, инициализируйте его с записью-владельцем и присвойте тот ссылочный объект полю находящейся в собственности записи. При разработке отношений среди собственных записей сделайте владельца более важными из двух связанных записей. Запись-владелец редко зависит от любых записей, указывающих на нее. Запись-владелец является также той, которую Вы обычно выбираете сначала от базы данных.

Рисунок 1 показывает пример отношения между записью списка ожидающих выполнения задач и рядом записей элемента, представляющих отдельные элементы для завершения. Список ожидающих выполнения задач является первичной записью или владельцем, в отношении, потому что это представляет весь список ожидающих выполнения задач, включая все элементы в списке. В результате каждая запись элемента имеет поле, содержащее a CKReference возразите, что точки к списку ожидающих выполнения задач владения записывают. Перечисление 1 показывает, как создать ссылочный объект для каждого элемента, записывают и конфигурируют его для указания на запись списка.

Отношение рисунка 1The между находящимися в собственности и записями-владельцами image: ../Art/ckreference_owner_owned.jpg
Перечисление 1Creating ссылка между записью списка и записью элемента
  • CKReference* ref = [[CKReference alloc] initWithRecord:listRecord action:CKReferenceActionDeleteSelf];
  • [itemRecord setObject:ref forKey:@"owningList"];

Тип владения организации полезен, даже если одному объекту явно не принадлежит другой. Владение помогает установить отношения между записями и как Вы ищете их в базе данных. Владение не требует удаления находящихся в собственности записей каждый раз, когда удалена их запись-владелец. Можно предотвратить такие удаления путем указания CKReferenceActionNone действие, когда Вы создаете a CKReference объект.

Поиск связанных записей

Когда Вы хотите найти записи, связанные с единственным объектом владельца, Вы создаете a CKReference объект и использование это для создания поискового предиката. При использовании ссылочных объектов в поисковых предикатах поисковый код смотрит только на Значение идентификатора в ссылочном объекте. Это соответствует ID, найденный в записях указанного типа с ID, который Вы обеспечили в CKReference объект.

Перечисление 2 показывает, как использовать ссылочный объект создать запрос для записей, показанных на рисунке 1. listID переменная является заполнителем для рекордного ID списка, элементы которого Вы хотите получить. Предикат говорит объекту запроса искать owningList поле целевых записей и сравнивает ссылочный объект там с тем в recordToMatch переменная. Выполнение объекта операции запроса возвращает соответствующие записи асинхронно на блок завершения, который Вы обеспечиваете.

Перечисление 2Searching для записей с помощью ссылочного объекта
  • // Match item records whose owningList field points to the specified list record.
  • CKReference* recordToMatch = [[CKReference alloc] initWithRecordID:listID
  • action:CKReferenceActionDeleteSelf];
  • NSPredicate* predicate = [NSPredicate predicateWithFormat:@"owningList == %@", recordToMatch];
  • // Create the query object.
  • CKQuery* query = [[CKQuery alloc] initWithRecordType:@"Item" predicate:predicate];
  • CKQueryOperation* queryOp = [[CKQueryOperation alloc] initWithQuery:query zoneID:nil];
  • queryOp.queryCompletionBlock = ^(NSArray* results, NSData* nextCursor, NSError* opError){
  • // Process the results…
  • };
  • // Add the CKQueryOperation to a queue to execute it and process the results asynchronously.

Наследование


Оператор импорта


Swift

import CloudKit

Objective C

@import CloudKit;

Доступность


Доступный в OS X v10.10 и позже.
  • init (recordID:action:) - initWithRecordID:action: Определяемый инициализатор

    Инициализирует и возвращает ссылочный объект, указывающий на запись с указанным ID.

    Объявление

    Swift

    init!(recordID recordID: CKRecordID!, action action: CKReferenceAction)

    Objective C

    - (instancetype)initWithRecordID:(CKRecordID *)recordID action:(CKReferenceAction)action

    Параметры

    recordID

    ID целевой записи. Если Вы указываете, этот метод выдает исключение nil для этого параметра.

    action

    Опция владения установить между целевой записью и любыми записями, включающими этот ссылочный объект. Если Вы указываете CKReferenceActionDeleteSelf опция, запись, именуемая recordID параметру принадлежит (или действует как родитель) любых объектов, использующих этот ссылочный объект. Для списка возможных значений посмотрите CKReferenceAction.

    Возвращаемое значение

    Инициализированный ссылочный объект, указывающий на указанную запись, или nil если не может быть инициализирована ссылка.

    Обсуждение

    Используйте этот метод, когда у Вас есть только ID записи, которая должна стать целью ссылки. Вы могли бы использовать этот метод при сохранении только ID записи на локальный кэш данных.

    При создании ссылочного объекта для использования в поисковом предикате предикат игнорирует значение в action параметр. Поисковые предикаты используют только ID записи во время их сравнения.

    Оператор импорта

    Objective C

    @import CloudKit;

    Swift

    import CloudKit

    Доступность

    Доступный в OS X v10.10 и позже.

  • Инициализирует и возвращает ссылочный объект, указывающий на указанный рекордный объект.

    Объявление

    Swift

    convenience init!(record record: CKRecord!, action action: CKReferenceAction)

    Objective C

    - (instancetype)initWithRecord:(CKRecord *)record action:(CKReferenceAction)action

    Параметры

    record

    Целевая запись ссылки.

    action

    Опции владения установить для записей. Если Вы указываете CKReferenceActionDeleteSelf опция, объект, именуемый recordID параметр становится владельцем любых объектов, использующих этот ссылочный объект. Для списка возможных значений посмотрите “CKReferenceAction”.

    Возвращаемое значение

    Инициализированный ссылочный объект, указывающий на указанную запись, или nil если не может быть инициализирована ссылка.

    Обсуждение

    Используйте этот метод для инициализации ссылки на локальный рекордный объект. Локальная запись может быть той, которую Вы просто создали или тот, который Вы выбрали ранее от сервера.

    При создании ссылочного объекта для использования в поисковом предикате предикат игнорирует значение в action параметр. Поисковые предикаты используют только ID записи во время их сравнения.

    Оператор импорта

    Objective C

    @import CloudKit;

    Swift

    import CloudKit

    Доступность

    Доступный в OS X v10.10 и позже.

  • referenceAction referenceAction Свойство

    Поведение владения для записей. (только для чтения)

    Объявление

    Swift

    var referenceAction: CKReferenceAction { get }

    Objective C

    @property(nonatomic, readonly, assign) CKReferenceAction referenceAction

    Обсуждение

    Значение в этом свойстве определяет, какие меры, если таковые имеются, для взятия, когда цель ссылочного объекта — т.е. объект указал в recordID свойство — удалено. Когда это свойство установлено в CKReferenceActionDeleteSelf, удаление целевого объекта удаляет любые записи, содержащие ту ссылку в одном из их полей. Когда это свойство установлено в CKReferenceActionNone, удаление целевого объекта не удаляет дополнительных объектов.

    Оператор импорта

    Objective C

    @import CloudKit;

    Swift

    import CloudKit

    Доступность

    Доступный в OS X v10.10 и позже.

  • recordID recordID Свойство

    ID записи, на которую ссылаются. (только для чтения)

    Объявление

    Swift

    @NSCopying var recordID: CKRecordID! { get }

    Objective C

    @property(nonatomic, readonly, copy) CKRecordID *recordID

    Обсуждение

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

    Оператор импорта

    Objective C

    @import CloudKit;

    Swift

    import CloudKit

    Доступность

    Доступный в OS X v10.10 и позже.

  • Константы, указывающие поведение, когда запись, на которую ссылаются, удалена.

    Объявление

    Swift

    enum CKReferenceAction : UInt { case None case DeleteSelf }

    Objective C

    typedef enum CKReferenceAction : NSUInteger { CKReferenceActionNone = 0, CKReferenceActionDeleteSelf = 1, } CKReferenceAction;

    Константы

    • None

      CKReferenceActionNone

      Никакое действие, когда запись, на которую ссылаются, удалена. Удаление родительской записи не удаляет дочерние элементы, обращающиеся к тому родителю. CKReference объект все еще содержит ID удаленной записи и не обновляется автоматически.

      Доступный в OS X v10.10 и позже.

    • DeleteSelf

      CKReferenceActionDeleteSelf

      Удалить действие для записей, на которые ссылаются. Удаление записи также удаляет любые записи, содержащие CKReference объекты, указывающие на ту запись. Удаление дополнительных записей может инициировать каскадное удаление большего количества записей.

      Доступный в OS X v10.10 и позже.

    Оператор импорта

    Objective C

    @import CloudKit;

    Swift

    import CloudKit

    Доступность

    Доступный в OS X v10.10 и позже.