CKReference
A CKReference
объект создает many-one отношение между записями в Вашей базе данных. Каждая ссылочная информация об объектно-ориентированных памятях об одной записи, которая является целью ссылки. Вы тогда сохраняете ссылочный объект в полях одной или более записей для создания ссылки от тех записей до цели. Обе записи должны быть расположены в той же зоне той же базы данных.
Ссылки создают более сильное отношение между записями, чем просто сохранение ID записи как строка. В частности можно использовать ссылки для создания модели владения между двумя записями. Когда действие ссылочного объекта установлено в CKReferenceActionDeleteSelf
опция, цель ссылки — т.е. запись сохранена в ссылке recordID
свойство — становится владельцем любых записей, относящихся к нему. Удаление цели (владелец), запись удаляет все записи, относящиеся к нему. (Удаление любых находящихся в собственности записей может инициировать дальнейшие удаления, если те записи являются самостоятельно владельцами других записей.), Если запись содержит два или больше CKReference
объекты, действия которых установлены в CKReferenceActionDeleteSelf
, когда любой из ее ссылочных объектов удален, запись удалена.
При сохранении записи, содержащей a CKReference
объект в том, если его поля, сервер должен знать о цели ссылки. Попытки сохранить запись без первого сохранения ее целевой записи, на которую ссылаются, приводят к ошибке. Решение состоит в том, чтобы сохранить целевую запись сначала или сохранить обе записи с помощью того же CKModifyRecordsOperation
объект.
Взаимодействие со ссылочными объектами
Вы используете ссылочные объекты создать прочные связи между двумя записями и искать смежные области. При создании новых записей Вы создаете ссылочные объекты и присваиваете их полям Ваших записей. Единственное другое время Вы создаете ссылочные объекты, - при создании поискового предиката для поиска связанных записей.
Соединение с другой записью
Чтобы соединить записи и создать прочные отношения между ними, создайте новое CKReference
возразите, инициализируйте его с записью-владельцем и присвойте тот ссылочный объект полю находящейся в собственности записи. При разработке отношений среди собственных записей сделайте владельца более важными из двух связанных записей. Запись-владелец редко зависит от любых записей, указывающих на нее. Запись-владелец является также той, которую Вы обычно выбираете сначала от базы данных.
Рисунок 1 показывает пример отношения между записью списка ожидающих выполнения задач и рядом записей элемента, представляющих отдельные элементы для завершения. Список ожидающих выполнения задач является первичной записью или владельцем, в отношении, потому что это представляет весь список ожидающих выполнения задач, включая все элементы в списке. В результате каждая запись элемента имеет поле, содержащее a CKReference
возразите, что точки к списку ожидающих выполнения задач владения записывают. Перечисление 1 показывает, как создать ссылочный объект для каждого элемента, записывают и конфигурируют его для указания на запись списка.
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
переменная. Выполнение объекта операции запроса возвращает соответствующие записи асинхронно на блок завершения, который Вы обеспечиваете.
// 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.
Соответствует
-
AnyObject
-
CKRecordValue
-
CVarArgType
-
Сопоставимый
-
Hashable
-
NSCoding
-
NSCopying
-
NSObjectProtocol
-
NSSecureCoding
-
Печатаемый
-
NSCopying
-
NSObject
-
NSSecureCoding
Оператор импорта
Swift
import CloudKit
Objective C
@import CloudKit;
Доступность
Доступный в OS X v10.10 и позже.
-
init (recordID:action:) - initWithRecordID:action:
Определяемый инициализаторИнициализирует и возвращает ссылочный объект, указывающий на запись с указанным ID.
Объявление
Swift
init!(recordID
recordID
: CKRecordID!, actionaction
: 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!, actionaction
: 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 и позже.
-
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 и позже.
-