代码之家  ›  专栏  ›  技术社区  ›  Peter

尝试使用Swift更新核心数据项时出现错误“引用静态方法'buildExpression'时没有完全匹配”

  •  0
  • Peter  · 技术社区  · 2 年前

    目前,我很长一段时间以来第一次参与iPhone的开发,遇到了一个我似乎无法克服的障碍。这个想法是,当我准备好保存时,这个代码将允许我更新item.count。此时,我必须计算新的值。在这个代码示例中,我只是将它设置为0。

    这将为行生成以下错误 item.count = 0 :

    引用静态方法“buildExpression”时没有完全匹配

    以下是代码:

    import SwiftUI
    import CoreData
          
    struct CollectedFormView: View {
        @Environment(\.managedObjectContext) private var viewContext
        @FetchRequest(
            sortDescriptors: [NSSortDescriptor(keyPath: \Item.name, ascending: true)],
            predicate: NSPredicate(format: "count > %i", Int32(0)),
            animation: .default
        ) private var items: FetchedResults<Item>
    
        var body: some View {
            VStack {
                Form {
                    ...
                    }
                }
                .toolbar {
                    ToolbarItem {
                        Button("Save") {
                            saveItems()
                        }
                    }
                }.navigationTitle("Collected Items")
            }
        }
        
        private func saveItems() {
            ForEach(items) { item in
                if (collected[item.name ?? ""] != nil) {
                    item.count = 0
                }
            }
            ...
        }
    }
    

    我已经删除了任何我不认为会导致问题的代码。有人能告诉我是什么原因导致了这个错误吗?

    1 回复  |  直到 2 年前
        1
  •  1
  •   workingdog support Ukraine    2 年前

    ForEach(...) 是SwiftUI中需要返回视图的视图,这就是您出现错误的原因。所以试试数组循环, items.forEach{ item in ... 相反