我正在尝试使用CoreData和SwiftUI,并且有两个实体;狗和步行。 狗之间是一对多的关系
import React,{useState} from "react";
const ParentComponent = () => {
const increment = bar => bar+1;
const decrement = bar => bar-1;
const [func,setfunc] = useState(increment);
return <div>
//When this button is clicked,`func` value will be changed
<button onClick={() => setfunc(decrement)}/>
// This is your component
<foo func={func}/>
</div>
}
走路
public class Dog: NSManagedObject,Identifiable {
@NSManaged public var name: String?
@NSManaged public var walks: nsorderedset?
}
我遇到的问题是在列表中显示所选狗的所有行走情况。以下WalksView将显示所有当前的步行
public class Walk: NSManagedObject,Identifiable {
@NSManaged public var date: Date?
@NSManaged public var dog: Dog?
}
但是当我添加一个新应用时,该应用程序崩溃并显示以下错误:
struct WalksView: View {
@ObservedObject var dogWalksVM:DogWalkVM
var selectedIndex:Int
var body: some View {
let currentDog = dogWalksVM.dogs[selectedIndex]
return List {
if currentDog.walks == nil {
EmptyView()
} else {
ForEach(0..<currentDog.walks!.count) { index in
Text("Date \(self.walkDate(currentDog.walks![index] as! Walk))")
}
}
}
.navigationBarTitle(Text("Walks for \(dogWalksVM.dogs[selectedIndex].name ?? "")"),displayMode: .inline)
.navigationBarItems(trailing: Button(action: {
self.addWalk(for: currentDog)
},label: {
Image(systemName: "plus")
}))
}
func walkDate(_ walk:Walk) -> String{
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .medium
guard let walkDate = walk.date as Date? else { return ""}
return dateFormatter.string(from: walkDate)
}
func addWalk(for currentDog:Dog) {
self.dogWalksVM.addWalk(for: currentDog)
}
}
如果我尝试在这样的步行道上进行ForEach:
ForEach<Range<Int>,Int,Text> count (1) != its initial count (0).
`ForEach(_:content:)` should only be used for *constant* data.
Instead conform data to `Identifiable` or use `ForEach(_:id:content:)` and provide an explicit `id`!
有人告诉我
ForEach(Array(currentDog.walks!),id: \.self) { walk in
Text("Date \(self.walkDate(walk))")
}