相关疑难解决方法(0)

当 SwiftUI 中的相关实体发生更改时,如何更新 @FetchRequest?

在 SwiftUI 中,View我有一个List基于@FetchRequest显示Primary实体和通过关系连接Secondary实体的数据。当我添加一个带有新的相关次要实体的新实体时,View和它List的更新正确Primary

问题是,当我Secondary在详细视图中更新连接的项目时,数据库会更新,但更改未反映在Primary列表中。显然,@FetchRequest不会被另一个视图中的更改触发。

当我此后在主视图中添加新项目时,先前更改的项目最终会得到更新。

作为一种解决方法,我还更新Primary了详细信息视图中实体的属性,并将更改正确传播到Primary视图。

我的问题是:如何强制更新@FetchRequestsSwiftUI Core Data 中的所有相关内容?特别是,当我无法直接访问相关实体时/ @Fetchrequests

数据结构

import SwiftUI

extension Primary: Identifiable {}

// Primary View

struct PrimaryListView: View {
    @Environment(\.managedObjectContext) var context

    @FetchRequest(
        entity: Primary.entity(),
        sortDescriptors: [NSSortDescriptor(key: "primaryName", ascending: true)]
    )
    var fetchedResults: FetchedResults<Primary>

    var body: some View {
        List {
            ForEach(fetchedResults) { primary in
                NavigationLink(destination: …
Run Code Online (Sandbox Code Playgroud)

core-data swiftui combine

36
推荐指数
3
解决办法
1万
查看次数

SwiftUI:删除所有核心数据实体条目后,列表不会自动更新

我知道 SwiftUI 使用状态驱动渲染。所以我假设,当我删除核心数据实体条目时,我的包含核心数据元素的列表会立即刷新。我使用此代码,它成功地清理了我的实体:

func deleteAll()
{
    let fetchRequest: NSFetchRequest<NSFetchRequestResult> = ToDoItem.fetchRequest()
    let deleteRequest = NSBatchDeleteRequest(fetchRequest: fetchRequest)

    let persistentContainer = (UIApplication.shared.delegate as! AppDelegate).persistentContainer

    do {
        try persistentContainer.viewContext.execute(deleteRequest)
    } catch let error as NSError {
        print(error)
    }
}
Run Code Online (Sandbox Code Playgroud)

为了让我的视图中的列表视觉上为空,我必须在之后离开视图(例如使用“self.presentationMode.wrappedValue.dismiss()”)并再次打开它。好像这些值仍然存储在内存中的某个地方。这当然不是用户友好的,我确信我只是监督了一些可以立即刷新列表的内容。也许有人可以帮忙。

core-data swift swiftui

13
推荐指数
2
解决办法
3746
查看次数

标签 统计

core-data ×2

swiftui ×2

combine ×1

swift ×1