Проблемы синхронизации CoreData + CloudKit: наблюдаемые сохранения контекста и пропущенные миграцииIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Проблемы синхронизации CoreData + CloudKit: наблюдаемые сохранения контекста и пропущенные миграции

Сообщение Anonymous »

Я использую CoreData с CloudKit в своем приложении для iOS и столкнулся с рядом проблем при синхронизации данных. Журналы показывают несколько сохранений контекста и пропусков миграции, но нет четкого указания на то, что может быть не так. Ниже приведен отрывок из журналов и соответствующий код установки CoreData.
В журналах постоянно отображается следующее:

Код: Выделить всё

CoreData: debug: CoreData+CloudKit: -[NSCloudKitMirroringDelegate remoteStoreDidChange:]_block_invoke_2(3216):
 - Ignoring remote change notification because it didn't change any entities tracked by persistent history:
 (URL: file:///var/mobile/Containers/Data/Application/62AABD0C-972D-4477-BB81-DA2F385B5B43/Library/Application%20Support/CloudDataModel.sqlite)
И несколько пропущенных миграций, например:

Код: Выделить всё

CoreData: debug: CoreData+CloudKit: -:
Skipping migration for 'ANSCKRECORDMETADATA' because it already has a column named 'ZNEEDSUPLOAD'
Вот конфигурация моего NSPersistentCloudKitContainer в PersistenceController.swift:

Код: Выделить всё

lazy var cloudContainer: NSPersistentCloudKitContainer = {
let container = NSPersistentCloudKitContainer(name: "CloudDataModel")

guard let description = container.persistentStoreDescriptions.first else {
fatalError("Failed to retrieve store description")
}

description.setOption(true as NSNumber, forKey: NSPersistentHistoryTrackingKey)
description.setOption(true as NSNumber, forKey: NSPersistentStoreRemoteChangeNotificationPostOptionKey)

let containerIdentifier = "iCloud.com.integralstudios.kalo"
description.cloudKitContainerOptions = NSPersistentCloudKitContainerOptions(containerIdentifier: containerIdentifier)

container.loadPersistentStores { description, error in
if let error = error {
print("❌ Unable to load cloud persistent stores: \(error)")
}
}

container.viewContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
container.viewContext.transactionAuthor = "integralstudios.kalo"
container.viewContext.automaticallyMergesChangesFromParent = true

do {
try container.viewContext.setQueryGenerationFrom(.current)
try container.initializeCloudKitSchema()
} catch {
print("⚠️ Failed to initialize CloudKit schema: \(error)")
}

return container
}()
Я также использую этот метод для сохранения данных:

Код: Выделить всё

func save() {
let localContext = localContainer.viewContext
let cloudContext = cloudContainer.viewContext

if localContext.hasChanges {
do {
try localContext.save()
} catch {
print("Error saving local context: \(error)")
}
}

if cloudContext.hasChanges {
do {
try cloudContext.save()
} catch {
print("Error saving cloud context: \(error)")
}
}
}
Мои собственные журналы показывают, что функциональность CloudKit работает:

Код: Выделить всё

✅ CloudKit schema initialized successfully
✅ Audio session configured successfully
✅ Using shared PersistenceController instance
✅ Verified 6 meals in cloud context
✅ SharedDataManager: UserDefaults created
✅ SharedDataManager: Defaults registered
✅ SharedDataManager: Successfully verified write access

Кроме того, средство просмотра БД icloud.developer не показывает ничего необычного.
  • NSCloudKitMirroringDelegate наблюдает за изменениями, но многие пропускает уведомления.
  • Похоже, что постоянные изменения истории не отслеживаются должным образом.
  • Некоторые миграции пропускаются из-за существующих столбцов.
Мы будем очень признательны за любые идеи, предложения или подобный опыт! Особенно все, что помогает мне устранить эти вызовы ошибок.

Подробнее здесь: https://stackoverflow.com/questions/793 ... migrations
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как избежать назначения объектов CoreData в двух разных зонах записей CloudKit?
    Anonymous » » в форуме IOS
    0 Ответы
    36 Просмотры
    Последнее сообщение Anonymous
  • Возможна ли необлегченная миграция CoreData с CloudKit?
    Гость » » в форуме IOS
    0 Ответы
    64 Просмотры
    Последнее сообщение Гость
  • Миграция локальных CoreData в CloudKit (и наоборот)
    Anonymous » » в форуме IOS
    0 Ответы
    56 Просмотры
    Последнее сообщение Anonymous
  • Как отслеживать статус синхронизации с помощью CloudKit/SwiftData в SwiftUI
    Anonymous » » в форуме IOS
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • CoreData: ошибка: изменение управляемого объекта после его удаления из контекста.
    Anonymous » » в форуме IOS
    0 Ответы
    33 Просмотры
    Последнее сообщение Anonymous

Вернуться в «IOS»