我有一个显示跑步锻炼细节的视图。在此视图中,我有 Picker,允许用户选择锻炼中使用的一双鞋。一旦用户选择了这双鞋并按下“更新”按钮,鞋子的里程就会更新。里程数是鞋子实体的一个属性(核心数据)
核心数据对象的更新工作正常(数据按预期更新),但视图崩溃。最初我认为这是一个核心数据问题,但现在我认为选择器正在努力更新选择器中列出的对象。
我正在尝试,因此仍然有一些不必要的代码行(一旦它工作正常,我必须清理它)。
这是我声明属性/变量的方式:
@State private var wOshoes = [WorkoutShoeEntity]()
@State private var selectedShoe = ShoeEntity ()
@State private var unselectedShoe: ShoeEntity?
@State private var newShoe: ShoeEntity?
@State private var initialShoe = String()
@State private var buttonDisabled = true
@FetchRequest(sortDescriptors: []) var shoes: FetchedResults<ShoeEntity>
@FetchRequest(sortDescriptors: []) var workoutShoes: FetchedResults<WorkoutShoeEntity>
@Environment(\.managedObjectContext) var moc
这里是景色:
HStack{
Label("Summary", systemImage:"shoeprints.fill")
.font(.headline)
.foregroundColor(.gray)
.labelStyle(.iconOnly)
Picker ("Select your shoes", selection: $selectedShoe){
Text(initialShoe).tag(UUID())
ForEach(shoes, id: \.self){ shoe in
Text (shoe.name ?? "Fehlerteufel").tag(Optional(shoe))
}
}.onTapGesture {
buttonDisabled.toggle()
}
Spacer()
Button("Update"){
updateMileage()
buttonDisabled.toggle()
}.disabled(buttonDisabled)
}
.padding(20)
.onAppear(){
initialShoe = "No shoe assigned..."
getShoe()
print(wOshoes.count)
if (wOshoes.count>0){
print ("schon schuhe dran")
selectedShoe = getShoeDetails(shoeID: (wOshoes.first?.shoeID)!)
initialShoe = getShoeName(shoeID: (wOshoes.first?.shoeID)!)
}
}
}
updateMileage() 函数是这样的:
func updateMileage(){
if(wOshoes.count>0){
print ("Bereits ein Schuh zugewiesen")
unselectedShoe = getShoeDetails(shoeID: (wOshoes.first?.shoeID)!)
let value = (unselectedShoe?.distance ?? 0.0) - (workout.distance ?? 0.0)
updateShoeDistance(shoe: unselectedShoe!, newValue: value)
let value1 = (selectedShoe.distance ?? 0.0) + (workout.distance ?? 0.0)
updateShoeWorkAssignment(shoeWorkout: wOshoes.first!, shoe: selectedShoe)
newShoe = getShoeDetails(shoeID: (selectedShoe.id)!)
updateShoeDistance(shoe: selectedShoe.self, newValue: value1)
}else{
/*print ("noch kein Schuh zugewiesen")
let value = (selectedShoe.distance ?? 0.0) + (workout.distance ?? 0.0)
//updateShoeDistance(shoe: selectedShoe!.self, newValue: value)
assignNewShoeToWorkout(shoeID: (selectedShoe.id)!, workoutID: workout.id)
selectedShoe?.name = "ich habe es aktualisiert"
newShoe = getShoeDetails(shoeID: (selectedShoe.id)!)
//newShoe?.mainImage = "Das wäre Image"
print (newShoe)*/
}
}
updateDistance函数如下:
func updateShoeDistance(shoe: ShoeEntity, newValue: Double){
print(shoe.description)
shoe.distance = newValue
shoe.setValue(newValue, forKey: "distance")
try? moc.save()
}
如前所述,核心数据对象正在更新,但视图在更新过程后关闭。我在控制台中没有收到任何错误消息。我认为问题出在选择器上。
有人能给我一些小费吗?