Как автоматически отразить изменения CoreData + iCloud в представлении SwiftUI? - PullRequest
3 голосов
/ 04 марта 2020

? Итак ... У меня есть приложение с включенными StoreData и iCloud. Мои данные синхронизируются между устройствами, но я не понимаю, какое поведение я хочу, когда дело доходит до отражения изменений в пользовательском интерфейсе.

Поведение, которое я хочу: Когда у пользователя есть мой Приложение открывается на двух устройствах (A и B) и вносит изменения одно (A) из них. Я хочу, чтобы изменение автоматически отображалось во втором (B) интерфейсе устройства в течение некоторого разумного времени.

enter image description here

Поведение, которое у меня сейчас есть: Когда пользователь вносит изменения на одном устройстве (A), на другом ничего не происходит (B) ... пока я не сверну и разверните приложение на втором устройстве (B) ( Не перезапускается ... просто минимизируется ).

enter image description here

? My Считается, что приложение не получит изменения (iCloud не будет синхронизироваться c), пока не произойдет какое-либо действие при сворачивании и повторном открытии приложения.

? Но я не знаю. Согласно Синхронизация основного хранилища данных с CloudKit синхронизация и уведомление других устройств должны происходить автоматически. И я думаю, что мой View должен быть правильно подключен, так как он будет мгновенно изменяться при локальных изменениях данных в базе данных CoreData.

Мой вид SwiftUI выглядит примерно так:

import SwiftUI
import CloudKit
import Foundation

struct MyView: View {
    @FetchRequest(fetchRequest: Entity.fetchRequest() as! NSFetchRequest<Entity>) var entities: FetchedResults<Entity>

    var body: some View {
        List {
            ForEach(entities, id: \.id) { e in
                Text("\(e.title)")
            }
        }
    }
}

public class Entity: NSManagedObject {
    @NSManaged public var id: UUID?
    @NSManaged public var title: String
}

Любая помощь очень ценится! (Дайте мне знать, если мне потребуется предоставить дополнительную информацию.)

...