NSOrderedSet和SwiftUI ForEach

我正在尝试使用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))")
            }
yuelao0308 回答:NSOrderedSet和SwiftUI ForEach

以下内容应为您提供帮助

 ForEach(Array(currentDog.walks!.set),id: \.self) { walk in
                Text("Date \(self.walkDate(walk))")
            }
,

如本response中所述,有一种更好的方法可以遍历NSOrderedSet。 Array(my_nsorderedset.set)不会保留顺序!

相反,请使用mynsorderedset.array作为! [ContainedType]。

本文链接:https://www.f2er.com/3140670.html

大家都在问