SwiftUI CoreData:在视图加载时将CoreData元素附加到数组中(或者有更好的方法吗?)



在我当前的项目中,我第一次在SwiftUI中使用核心数据。在许多问题之后,我现在可以用以下代码在列表中显示数据:

@FetchRequest(entity: SensorData.entity(), sortDescriptors: []) var sensorData: FetchedResults<SensorData>
List(sensorData, id: .self){temp in
Text("(temp.temperatur)")
}

(数据被写入其他地方的CoreData模型,效果良好(

在我的模型中,我有一个实体(SensorData(,它有一个类型为Double的属性温度。

所以,在这一点上,每件事都很好,我得到了一个列表,每个条目。但我想在图表中显示数据,为此我需要Double数组中的条目。我该怎么做?我试过这个:

var temperatures: [Double] = []
init(){
for temp in sensorData{
temperatures.append(temp.temperatur)
}
}
LineView(data: temperatures, title: "Temperatur")
.padding()
.frame(height: 500, alignment: .center)

这里我得到了错误:线程1:EXC_BAD_INSTRUCTION(代码=EXC_I386_INVOP,子代码=0x0(

此外,我已经将属性的类型设置为Transformabel,并将其设置为[Double]。然后我将数据写入模型,如下所示:

if let temperatur = Double(temperatur){
let sensorData = SensorData(context: self.viewContext)
sensorData.temperatur?.append(temperatur)

try? self.viewContext.save()
}

但现在我得到了错误:

线程1:致命错误:未解决的错误错误域=NSCocoaErrorDomain代码=134140〃;永久存储迁移失败,缺少映射模型"UserInfo={destinationModel=(<NSManagedObjectModel:0x600001044af0>(是可编辑的0,实体{SensorData=";(<NSEntityDescription:0x60000045c4d0>(name SensorData,managedObjectClassName SensorData、重命名标识符SensorData。isAbstract 0,超级实体名称(null(,属性{\temptur="(<NSAttributeDescription:0x600001d7af80>;(,name temptur,is Optional

有人能帮帮我吗?

由于更改了数据模型,所以出现了错误。CoreData正在尝试迁移到新模型,但无法确定如何迁移。如果您正在开发中,只需从模拟器/设备中删除应用程序并重新运行即可。

但我不知道你为什么要更改模型——你希望每个SensorData对象都有一个temperatur属性,它是Doubles的数组吗?你以前的模型看起来不错;阵列";个SensorData对象,每个对象都有(只有一个(Double作为temperatur属性。要将Doubles作为数组传递到LineView,请使用map:

LineView(data: sensorData.map() { $0.temperatur }, title: "Temperatur")

相关内容

最新更新