SwiftUI 核心数据错误 - “无法将 'FetchedResults<GCItem>' 类型的值转换为预期的参数类型 'Range<Int>'”

Posted

技术标签:

【中文标题】SwiftUI 核心数据错误 - “无法将 \'FetchedResults<GCItem>\' 类型的值转换为预期的参数类型 \'Range<Int>\'”【英文标题】:SwiftUI Core Data error - "Cannot convert value of type 'FetchedResults<GCItem>' to expected argument type 'Range<Int>'"SwiftUI 核心数据错误 - “无法将 'FetchedResults<GCItem>' 类型的值转换为预期的参数类型 'Range<Int>'” 【发布时间】:2020-04-02 02:17:16 【问题描述】:

任何想法为什么我在这里收到此错误?过去我在单独的测试项目中使用 Core Data 时没有遇到过这种情况。

无法将“FetchedResults”类型的值转换为预期值 参数类型“范围”

SwiftUI 查看代码(下方标有错误)

import SwiftUI
import CoreData

struct ContentView: View 
    @Environment(\.managedObjectContext) var context
    @FetchRequest(entity: GCItem.entity(), sortDescriptors: []) var gcItems: FetchedResults<GCItem>

    private func addItem(title:String) 
        let newItem = GCItem(context: context)
        newItem.id = UUID()
        newItem.title = title
        do 
            try context.save()
         catch let e as NSError 
            fatalError("Unresolved error \(e), \(e.userInfo)")
        
    

    var body: some View 
        NavigationView 
            VStack 
                List() 
                    ForEach(gcItems)  gcItem in   // ** ERROR HERE ***
                        HStack 
                            Text("test")
                        
                    
                
                Button(action:  self.addItem(title: "Testing 123") ) 
                    Text("ADD ITEM")
                
            
        
    

错误的可视化图像

核心数据模型

核心数据文件

【问题讨论】:

【参考方案1】:

GCItem 需要符合 Identifiable 才能使该代码正常工作。一个简单的空一致性应该可以工作,因为它已经有一个 id:

extension GCItem: Identifiable  

【讨论】:

随着 Swift 5.3 的引入,这在 Xcode 12 上中断了。因此,我添加了以下编译器指令:#if swift(&lt;5.3)

以上是关于SwiftUI 核心数据错误 - “无法将 'FetchedResults<GCItem>' 类型的值转换为预期的参数类型 'Range<Int>'”的主要内容,如果未能解决你的问题,请参考以下文章

从核心数据中删除/添加到核心数据后,带有列表的 SwiftUI TabView 不刷新

SwiftUI - 如何切换核心数据中的所有布尔值

Index Beyond Bounds / EXC_BAD_ACCESS 核心数据删除 SwiftUI

在@FetchRequest 中输入一个动态值,以从 SwiftUI 中的核心数据中获取单个实体

swiftUI核心数据模型

swiftui删除核心数据行