CKModifyRecordsOperation
A CKModifyRecordsOperation
объект сохраняет изменения в один или больше CKRecord
объекты. После изменения полей записи используйте этот тип объекта операции для сохранения тех изменений в базе данных. Вы также используете экземпляры этого класса для удаления записей постоянно из базы данных.
При сохранении записи, содержащей ссылки на другие записи, CloudKit должен быть в состоянии найти цель тех ссылок. Во время работы сохранения CloudKit проверяет, что любые целевые записи фактически существуют в базе данных. Если это не может проверить существование целевой записи, CloudKit сообщает об ошибке и не сохраняет запись, содержащую ссылку на ту цель. При создании двух новых записей, имеющих ссылку между ними, используйте тот же объект операции для сохранения обеих записей одновременно.
Когда Вы сохраняете записи, значение в savePolicy
свойство определяет, как продолжить, когда конфликты обнаруживаются на сервере. Поскольку записи могут быть изменены между временем, Вы выбираете их и время, Вы сохраняете их, политика сохранения определяет, перезаписывают ли новые изменения существующие изменения. По умолчанию, если более новая версия записи найдена на сервере, объект операции сообщает об ошибке. Можно изменить настройки по умолчанию, чтобы разрешить изменениям перезаписывать значения сервера полно или частичный.
Блоки, которые Вы присваиваете для контроля динамики работы, выполняются последовательно на внутренней очереди, которой управляет объект операции. Ваши блоки должны быть способны к выполнению на фоновом потоке, таким образом, любые задачи, требующие доступа к основному потоку, должны быть перенаправлены соответственно.
Если Вы присваиваете блок завершения completionBlock
свойство объекта операции, блок завершения вызывают после того, как работа выполняет и возвращает свои результаты Вам. Вы можете использовать блок завершения для выполнения работы по дому обслуживания, связанной с работой, но не используете ее для обработки результатов самой работы. Любой блок завершения, который Вы указываете, должен быть подготовлен обработать отказ работы выполнить ее задачу, ли вследствие ошибки или явной отмены.
Наследование
-
NSObject
-
NSOperation
-
CKOperation
-
CKDatabaseOperation
-
CKModifyRecordsOperation
-
NSObject
-
NSOperation
-
CKOperation
-
CKDatabaseOperation
-
CKModifyRecordsOperation
Оператор импорта
Swift
import CloudKit
Objective C
@import CloudKit;
Доступность
Доступный в OS X v10.10 и позже.
-
Инициализирует и возвращает объект операции, сконфигурированный, чтобы сохранить и удалить указанные записи.
Объявление
Swift
convenience init!(recordsToSave
records
: [AnyObject]!, recordIDsToDeleterecordIDs
: [AnyObject]!)Параметры
records
Массив
CKRecord
объекты, представляющие записи для сохранения, если таковые имеются. Можно указатьnil
для этого параметра.recordIDs
Массив
CKRecordID
объекты, представляющие записи, Вы хотите удалить, если таковые имеются. Можно указатьnil
для этого параметра.Возвращаемое значение
Инициализированный объект операции.
Обсуждение
Записи, которые Вы намереваетесь сохранить или удалить, должны все находиться в той же базе данных, которую можно указать при конфигурировании объекта операции. Сохранение записи, которая не находится в текущей базе данных, создает ее в базе данных. Попытка удалить запись, не существующую в текущей базе данных, возвращает ошибку для той записи.
Оператор импорта
Objective C
@import CloudKit;
Swift
import CloudKit
Доступность
Доступный в OS X v10.10 и позже.
-
recordsToSave recordsToSave
СвойствоЗаписи для сохранения к базе данных.
Объявление
Swift
var recordsToSave: [AnyObject]!
Objective C
@property(nonatomic, copy) NSArray *recordsToSave
Обсуждение
Это свойство содержит массив
CKRecord
объекты, которые Вы хотите сохранить. Начальное содержание массива установлено в записи, которые Вы указали вinitWithRecordsToSave:recordIDsToDelete:
метод. Можно изменить этот массив по мере необходимости прежде, чем выполнить работу. Записи должны все предназначаться для той же базы данных, но могут принадлежать различным зонам в базе данных.Если Вы намереваетесь изменить значение этого свойства, сделайте так прежде, чем выполнить работу или представить объект операции очереди.
Оператор импорта
Objective C
@import CloudKit;
Swift
import CloudKit
Доступность
Доступный в OS X v10.10 и позже.
-
recordIDsToDelete recordIDsToDelete
СвойствоIDs записей для удаления постоянно из базы данных.
Объявление
Swift
var recordIDsToDelete: [AnyObject]!
Objective C
@property(nonatomic, copy) NSArray *recordIDsToDelete
Обсуждение
Это свойство содержит массив
CKRecordID
объекты, идентифицирующие записи для удаления. Начальное содержание массива установлено в записи, которые Вы указали вinitWithRecordsToSave:recordIDsToDelete:
метод.Если Вы намереваетесь изменить значение этого свойства, сделайте так прежде, чем выполнить работу или представить объект операции очереди.
При удалении записей объект операции сообщает о прогрессе только относительно записей, которые Вы указываете в этом свойстве. Если существует отношение находившееся в собственности владельцев между записями, включающими a, удаление записей может инициировать удаление связанных записей
CKReference
объект. Когда дополнительные удаления происходят, о них не сообщают блокам прогресса этого объекта. По этой причине важно понять импликации модели владения, которую Вы используете при связи записей друг на друга через aCKReference
объект. Для получения дополнительной информации об отношениях находившихся в собственности владельцев, см. Ссылку класса CKReference.Оператор импорта
Objective C
@import CloudKit;
Swift
import CloudKit
Доступность
Доступный в OS X v10.10 и позже.
-
savePolicy savePolicy
СвойствоПолитика применяться, когда сервер содержит более новую версию определенной записи.
Объявление
Swift
var savePolicy: CKRecordSavePolicy
Objective C
@property(nonatomic, assign) CKRecordSavePolicy savePolicy
Обсуждение
Каждая запись имеет тег изменения, позволяющий серверу отслеживать, когда была сохранена та запись. При сохранении записи CloudKit сравнивает тег изменения в локальной копии записи с той на сервере. Если два тега не соответствуют — подразумевать, что существует потенциальный конфликт — сервер использует значение в этом свойстве, чтобы определить, как продолжить.
Значение по умолчанию этого свойства
CKRecordSaveIfServerRecordUnchanged
. Если Вы намереваетесь изменить значение этого свойства, сделайте так прежде, чем выполнить работу или представить объект операции очереди.Оператор импорта
Objective C
@import CloudKit;
Swift
import CloudKit
Доступность
Доступный в OS X v10.10 и позже.
-
Непрозрачный маркер, полученный при выборке изменений для ряда записей.
Объявление
Swift
@NSCopying var clientChangeTokenData: NSData!
Objective C
@property(nonatomic, copy) NSData *clientChangeTokenData
Обсуждение
Когда Вы выбираете изменения в ряде записей с помощью a
CKFetchRecordChangesOperation
объект, Вы получаете непрозрачный маркер данных, идентифицирующий запрос выборки на текущее устройство. При изменении записей от той работы выборки укажите тот же маркер в этом свойстве. CloudKit использует маркер для отслеживания изменений, которые Вы внесли в записи и оптимизировать информацию, которую это отправляет в сервер. Например, вместо того, чтобы отправить все содержание записи, это могло бы отправить только поля, значения которых изменились. После использования маркера можно выбросить его. После того, как маркер используется, CloudKit игнорирует последующие запросы модификации, включающие тот же маркер.Как правило, Вы указываете
nil
для этого свойства, если изменения не происходили из выборки с помощью aCKFetchRecordChangesOperation
объект. Значение по умолчаниюnil
.Если Вы намереваетесь изменить значение этого свойства, сделайте так прежде, чем выполнить работу или представить объект операции очереди.
Оператор импорта
Objective C
@import CloudKit;
Swift
import CloudKit
Доступность
Доступный в OS X v10.10 и позже.
-
Булево значение, указывающее, перестала ли вся работа работать, когда не могут быть записаны одна или более записей в той же зоне.
Объявление
Swift
var atomic: Bool
Objective C
@property(nonatomic, assign) BOOL atomic
Обсуждение
Изменение записей атомарно препятствует тому, чтобы Вы обновили свои данные в пути, который оставил бы его в противоречивом состоянии. Когда Вы хотите записать многократные записи на ту же рекордную зону, Вы используете атомарные обновления. Если существует отказ изменить какую-либо из записей в определенной зоне, никакие изменения не внесены в другие записи в той же самой зоне. Сама зона должна иметь
CKRecordZoneCapabilityAtomic
возможность этого поведения применяться. Если рекордная зона не поддерживает атомарную возможность, устанавливание этого свойства не имеет никакого эффекта.Значение по умолчанию этого свойства
YES
true
, который заставляет все модификации в единственной рекордной зоне быть сделанными атомарно. Если Ваш объект операции содержит записи в многократных рекордных зонах, отказ в одной зоне не предотвращает модификации к записям в различной зоне. Изменение значения этого свойства кNO
false
заставляет записи быть измененными индивидуально, независимо от того, поддерживает ли рекордная зона атомарные модификации.Оператор импорта
Objective C
@import CloudKit;
Swift
import CloudKit
Доступность
Доступный в OS X v10.10 и позже.
-
Блок для выполнения с информацией о прогрессе для отдельной записи.
Объявление
Objective C
@property(nonatomic, copy) void (^perRecordProgressBlock)( CKRecord *record, double progress)
Обсуждение
Блок не возвращает значения и берет следующие параметры:
record
CKRecord
объект, который находится в процессе того, чтобы быть сохраненным.progress
Сумма прогресса к сохранению записи, выраженной как процент ее общего размера. Это значение является числом между
0.0
и1.0
, где0.0
средние значения ни одна из записи не сохраняется и1.0
означает, что была сохранена вся запись.Объект операции выполняет этот блочный нуль или больше раз для каждой записи в
recordsToSave
свойство. Каждый раз, когда блок выполняется, он выполняется последовательно относительно других блоков прогресса работы.Если Вы намереваетесь использовать этот блок для обработки результатов, установите его прежде, чем выполнить работу или представить объект операции очереди. Используйте этот блок, чтобы отследить продолжающийся прогресс работы загрузки и возможно предоставить обратную связь пользователю.
Оператор импорта
Objective C
@import CloudKit;
Swift
import CloudKit
Доступность
Доступный в OS X v10.10 и позже.
-
Блок для выполнения, когда известны результаты сохранения единственной записи.
Объявление
Обсуждение
Блок не возвращает значения и берет следующие параметры:
record
A
CKRecord
возразите, что Вы попытались сохранить.error
Ошибочный объект, содержащий информацию о проблеме, или
nil
если запись была сохранена успешно.Этот блок выполняется один раз для каждой записи в
recordsToSave
свойство. Каждый раз, когда блок выполняется, он выполняется последовательно относительно других блоков прогресса работы.Если Вы намереваетесь использовать этот блок для обработки результатов, установите его прежде, чем выполнить работу или представить объект операции очереди. Используйте этот блок для принятия любых мер после того, как будет известно состояние сохранения записи.
Оператор импорта
Objective C
@import CloudKit;
Swift
import CloudKit
Доступность
Доступный в OS X v10.10 и позже.
-
Блок для выполнения после состояния всех изменений известен.
Объявление
Swift
var modifyRecordsCompletionBlock: (([AnyObject]!, [AnyObject]!, NSError!) -> Void)!
Обсуждение
Блок не возвращает значения и берет следующие параметры:
savedRecords
Массив
CKRecord
объекты Вы попытались сохранить.deletedRecordIDs
Массив
CKRecordID
объекты, соответствующие записям, Вы попытались удалить.operationError
Ошибочный объект, содержащий информацию о проблеме, или
nil
если результаты сохраняются успешно.Этот блок выполняется только один раз и представляет Ваш последний шанс обработать результаты работы. Это выполняется после того, как все отдельные блоки прогресса завершились, но перед блоком завершения работы. Блок выполняется последовательно относительно других блоков прогресса работы.
Если Вы намереваетесь использовать этот блок для обработки результатов, установите его прежде, чем выполнить работу или представить объект операции очереди.
Этот блок сообщает об ошибке типа
CKErrorPartialFailure
когда это сохраняет или удаляет только некоторые записи успешно.userInfo
словарь ошибки содержит aCKPartialErrorsByItemIDKey
ключ, значение которогоNSDictionary
объект. Ключами того словаря является IDs записей, не сохраненных или удаленных, и соответствующие значения являются ошибочными объектами, содержащими информацию о том, что произошло.Оператор импорта
Objective C
@import CloudKit;
Swift
import CloudKit
Доступность
Доступный в OS X v10.10 и позже.
-
Константы, указывающие политику применяться при сохранении записей.
Объявление
Swift
enum CKRecordSavePolicy : Int { case IfServerRecordUnchanged case ChangedKeys case AllKeys }
Objective C
typedef enum : NSInteger { CKRecordSaveIfServerRecordUnchanged = 0, CKRecordSaveChangedKeys = 1, CKRecordSaveAllKeys = 2, } CKRecordSavePolicy;
Константы
-
IfServerRecordUnchanged
CKRecordSaveIfServerRecordUnchanged
Политика, сохраняющая запись, только если локальная копия записи основывается на записи все еще на сервере. Сервер поддерживает тег изменения для каждой записи автоматически. При выборке записи тот тег изменения включен с остальной частью данных записи. Если тег изменения в Вашей локальной записи соответствует тег изменения записи на сервере, доходы работы сохранения обычно. Если запись сервера содержит более новый тег изменения, запись не сохраняется и ошибка типа
CKErrorServerRecordChanged
сообщается.Доступный в OS X v10.10 и позже.
-
ChangedKeys
CKRecordSaveChangedKeys
Политика, сохраняющая только те поля записи, фактически изменившейся, перезаписывая любые значения в настоящее время на сервере. Неизмененные поля оставляют нетронутыми.
Доступный в OS X v10.10 и позже.
-
AllKeys
CKRecordSaveAllKeys
Политика, сохраняющая все ключи записи (включая тех, которые не изменились) к серверу, перезаписывая любые значения в настоящее время на сервере. Ключевое настоящее только на сервере остается неизменным.
Для записи сервера возможно содержать ключи, не присутствующие локально. Другой клиент, возможно, добавил ключи к записи со времени, Вы выбрали запись. Кроме того, если Вы использовали
desiredKeys
свойство для запроса только подмножества ключей во время предыдущей работы выборки, сохраняя тот же самый рекордный объект изменило бы только выбранные ключи и любые ключи, добавленные к записи с тех пор.Доступный в OS X v10.10 и позже.
Оператор импорта
Objective C
@import CloudKit;
Swift
import CloudKit
Доступность
Доступный в OS X v10.10 и позже.
-