CKFetchDatabaseChangesOperation не возвращает идентификаторы зоны записи

Я использую CloudKit в своем приложении и начал с того, что следовал лучшим рекомендациям в видео WWDC "CloudKit Best Practices"

Первое, что нужно сделать, это проверить изменения, которые мне нравятся,

let changesOperation = CKFetchDatabaseChangesOperation(previousServerChangeToken: databaseChangeToken)
changesOperation.fetchAllChanges = true
changesOperation.recordZoneWithIDChangedBlock = { self.recordZoneWithIDChanged($0) }
changesOperation.recordZoneWithIDWasDeletedBlock = { self.recordZoneWithIDWasDeleted($0) }
changesOperation.changeTokenUpdatedBlock = { self.changeTokenUpdate($0) }
changesOperation.fetchDatabaseChangesCompletionBlock = { self.fetchDatabaseChangesCompletion($0, isMoreComing: $1, error: $2) }

privateDatabase.add(changesOperation)

Есть записи в частной базе данных, для которых я настраиваю выборку, но я только когда-либо получаю changeTokenUpdatedBlock и fetchDatabaseChangesCompletion,

Прав ли я, говоря, что я должен ожидать увидеть recordZoneWithIDChangedBlock когда я запускаю эту операцию и зона моей частной базы данных по умолчанию передается в этот блок?

Это значит, когда я звоню fetchDatabaseChangesCompletion, нечего извлекать, потому что массив идентификаторов зоны записи пуст (: error это ноль)

fileprivate func fetchDatabaseChangesCompletion(_ newToken: CKServerChangeToken?, isMoreComing: Bool, error: Error?)
{
    if let error = error
    {
        //  Handle error

        return
    }

    let fetchZoneChangesOperation = CKFetchRecordZoneChangesOperation(recordZoneIDs: changedRecordZoneIDs,
                                                                      optionsByRecordZoneID: nil)
    fetchZoneChangesOperation.recordChangedBlock = { self.recordChanged($0) }
    fetchZoneChangesOperation.recordWithIDWasDeletedBlock = { self.recordWithIDWasDeleted($0, string: $1) }
    fetchZoneChangesOperation.recordZoneFetchCompletionBlock = { self.recordZoneFetchCompletion($0, newChangeToken: $1, clientSentChangeTokenData: $2, isMoreComing: $3, error: $4) }
    fetchZoneChangesOperation.completionBlock = { self.fetchRecordZoneChangesCompletion() }

    privateDatabase.add(fetchZoneChangesOperation)
}

1 ответ

Я столкнулся с этой же проблемой, и это связано с CKFetchDatabaseChangesOperation а также CKFetchRecordZoneChangesOperation работает только на пользовательских зонах. CloudKit действительно хочет, чтобы разработчики разделили данные, чтобы они поддерживали больше возможностей в пользовательских зонах.

Недостатком использования зоны по умолчанию для хранения записей является то, что она не имеет каких-либо специальных возможностей. Вы не можете сохранить группу записей в iCloud атомарно в зоне по умолчанию. Точно так же нельзя использовать объект CKFetchRecordChangesOperation для записей в зоне по умолчанию.

CKRecordZone default() Ссылка

CKFetchRecordChangesOperation устарела в iOS 10 и заменена на CKFetchRecordZoneChangesOperation,

Другие вопросы по тегам