???? So...我有一个启用了 StoreData 和 iCloud 的应用程序。我的数据正在设备之间同步,但在反映 UI 中的更改时,我没有得到我想要的行为。
我想要的行为:当用户在两台设备(A 和 B)上打开我的应用程序并对其中一台(A)进行更改时,我希望该更改在合理的时间内自动反映在第二台(B)设备 UI 中。
我目前的行为:当用户在一台设备 (A) 上进行更改时,另一台设备 (B) 上不会发生任何变化...直到我最小化和最大化第二台设备 (B) 上的应用程序(不重新启动...只是最小化).
???? 我的想法是,在最小化并重新打开应用程序时触发某些操作之前,应用程序不会收到更改(iCloud 不会同步)。
???? 但我不知道。根据将核心数据存储与 CloudKit 同步 https://developer.apple.com/documentation/coredata/mirroring_a_core_data_store_with_cloudkit/syncing_a_core_data_store_with_cloudkit同步和通知其他设备应该自动发生。我认为我的视图应该正确连接,因为当对 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
}
任何帮助深表感谢!
(如果我需要提供更多信息,请告诉我。)
// MARK: - Core Data stack
lazy var persistentContainer: NSPersistentCloudKitContainer = {
let container = NSPersistentCloudKitContainer(name: "ComCloudSync")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
return container
}()
尝试添加以下代码(将“ComCloudSync”更改为您的应用程序名称):
// MARK: - Core Data stack
lazy var persistentContainer: NSPersistentCloudKitContainer = {
let container = NSPersistentCloudKitContainer(name: "ComCloudSync")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
container.viewContext.automaticallyMergesChangesFromParent = true
container.viewContext.mergePolicy = NSMergeByPropertyStoreTrumpMergePolicy
return container
}()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)