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(<5.3)
以上是关于SwiftUI 核心数据错误 - “无法将 'FetchedResults<GCItem>' 类型的值转换为预期的参数类型 'Range<Int>'”的主要内容,如果未能解决你的问题,请参考以下文章
从核心数据中删除/添加到核心数据后,带有列表的 SwiftUI TabView 不刷新
Index Beyond Bounds / EXC_BAD_ACCESS 核心数据删除 SwiftUI