@FetchRequest 属性包装器是不是会在发生更改时自动通知?

Posted

技术标签:

【中文标题】@FetchRequest 属性包装器是不是会在发生更改时自动通知?【英文标题】:Does the @FetchRequest property wrapper automatically notify when changes happen?@FetchRequest 属性包装器是否会在发生更改时自动通知? 【发布时间】:2020-11-23 23:20:03 【问题描述】:

如果我使用的是 NSPersistentCloudKitContainer,我会在 sqlite 文件中看到更改会自动同步。我还可以在 CloudKit 仪表板中进行更改,重新启动应用程序并查看更改。如果我使用@FetchRequest 加载一些项目,项目数组是否应该自动更新?

// Fetch some items
@FetchRequest(
        sortDescriptors: [NSSortDescriptor(keyPath: \Item.timestamp, ascending: true)],
        animation: .default)
    private var items: FetchedResults<Item>

// Show them in a List

List(items)  item in
  VStack 
    Text("Item at \(item.timestamp!, formatter: itemFormatter)")
  

【问题讨论】:

【参考方案1】:

是的,如果您在勾选使用 CoreData 和 CloudKit 时设置了不在 Apple 提供的默认代码中的 automaticallyMergesChangesFromParent = true

let container = NSPersistentCloudKitContainer(name: "MyApp")
container.viewContext.automaticallyMergesChangesFromParent = true

【讨论】:

以上是关于@FetchRequest 属性包装器是不是会在发生更改时自动通知?的主要内容,如果未能解决你的问题,请参考以下文章

在 UUID 类型属性上使用 @FetchRequest 谓词过滤进行不可靠更新?

原子属性包装器仅在声明为类而不是结构时才有效

如何使用属性作为 FetchRequest 谓词的参数

对 SwiftUI FetchRequest 的更改不会触发视图刷新?

属性包装器到属性包装器

Swift | 属性包装器