NSOrderedSet 和 SwiftUI ForEach

2023-11-22

我正在尝试使用 CoreData 和 SwiftUI 并有两个实体;狗与行。 Dog 之间是一对多的关系

public class Dog: NSManagedObject, Identifiable {
  @NSManaged public var name: String?
  @NSManaged public var walks: NSOrderedSet?
}

和步行

public class Walk: NSManagedObject, Identifiable {
  @NSManaged public var date: Date?
  @NSManaged public var dog: Dog? 
}

我遇到的问题是在列表中显示所选狗的所有散步。下面的WalksView将显示当前所有的步行

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<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:

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

有人告诉我

Protocol type 'NSOrderedSet.Element' (aka 'Any') cannot conform to 'Hashable' because only concrete types can conform to protocols

如本文所述response,有一种更好的方法来迭代 NSOrderedSet。 Array(my_nsorderedset.set) 不会保留顺序!

相反,使用 mynsorderedset.array 作为! [包含类型]。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NSOrderedSet 和 SwiftUI ForEach 的相关文章

  • 在这个使用泛型的初学者 java 示例程序中,“:”在做什么?

    好吧 我需要帮助理解一些事情 我理解 是如何一起使用的 但是阅读一些 Java 入门资料后 我发现这种情况在一些地方出现 最近的是这个 public static u void fillBoxes U u List u
  • 绑定大插入或更新的更有效方法?

    好的 我是绑定新手 这里有一些有效的代码 我从教程中学到了这种格式 但我想还有更有效的方法来做到这一点 在我的示例中 有 4 个名称 但实际上我将在我正在处理的项目中进行大量插入和更新 该项目将有 20 个左右的字段 我喜欢这种方法 因为它
  • SwiftUI 列表与右侧的部分索引?

    是否可以有一个在右侧有索引的列表 就像下面 SwiftUI 中的示例一样 我在 SwiftUI 中做了这个 Contacts swift TestCalendar Created by Christopher Riner on 9 11 2
  • 当我输入字符时,SwiftUI 中的 TextField 失去焦点

    当我在文本字段中输入字符时遇到问题 在练习集视图 我必须重新单击文本框才能输入另一个字符 如果我从文本字段中删除绑定 我可以流畅地输入文本 我认为这与我的演讲者班级和更新集函数重新创建一个集合实例 因为我必须替换数组中两层深处的一些值 Co
  • SwiftUI:发送电子邮件

    在正常情况下UIViewController在 Swift 中 我使用此代码发送邮件 let mailComposeViewController configuredMailComposeViewController mailCompose
  • 为什么选择选择器选项后我的 SwiftUI 页面标题会发生变化?

    struct SettingsView View let settings Setting Setting name Aperture Increments options 1 3 1 2 1 Setting name Shutter Sp
  • 带倒计时的php循环

    假设我从 400 开始计数器 我将如何执行一个向后运行直到 0 的 foreach 循环 伪代码 i 400 foreach SOMETHING do stuff i for i 400 i gt 0 i do stuff 其他方法 i 4
  • SwiftUI 键盘工具栏有条件

    不确定这是否是一个错误或者我是否做错了什么 但如果我使用 toolbar ToolbarItemGroup placement navigationBarLeading if isFocused zipCode Text Test 当等于
  • * foreach 里面的 foreach codeigniter 2?

    在 codeigniter 2 1 中 我尝试按类别显示频道 因此 如果我有一个名为 电影 的类别 我应该会看到电影中的频道列表 我尝试使用嵌套的 foreach 循环来完成此任务 但似乎无法使其工作 我的表结构是这样的 但更复杂 我的型号
  • 设备旋转时的 SwiftUI 重绘视图组件

    如何在 SwiftUI 中检测设备旋转并重新绘制视图组件 当第一个出现时 我有一个 State 变量初始化为 UIScreen main bounds width 的值 但当设备方向改变时 该值不会改变 当用户更改设备方向时 我需要重新绘制
  • SwiftUI 全屏图像背景

    我想在背景中显示全屏图像 我已经实现了这个 struct LoginView View var body some View VStack Spacer Text Hallo Text Hallo2 Text Hallo2 Text Hal
  • SwiftUI 自动调整底部工作表的大小

    SwiftUI 有很多底部工作表的示例 但是它们都指定了使用 GeometryReader 工作表可以增长到的某种类型的最大高度 我想要的是创建一个底部工作表 其高度仅与其中的内容一样高 我使用首选项键提出了下面的解决方案 但必须有更好的解
  • SwiftUI - 搜索栏

    我有以下名为 SearchBar swift 的文件 import SwiftUI struct SearchBar UIViewRepresentable Binding var text String class Coordinator
  • 为什么 foreach 将引用计数增加 2 而不是 1?

    NikiC 指出另一个线程 https stackoverflow com a 8263425 632951 在 a foreach 迭代之前 array是 软复制 的 在 foreach 中使用 这意味着没有完成实际的副本 而只是完成了
  • 如何在 SwiftUI 中使用键盘箭头滚动滚动视图中的项目?

    我已经使用 HStack for macOS 应用程序构建了一个具有水平类型滚动视图的视图 有没有办法使用键盘箭头圈出这些项目 我看到 ListView 有默认行为 但对于其他自定义视图类型则没有 单击此处查看屏幕截图 https shar
  • 如何使用 SwiftUI 动态添加联系人等文本字段?

    I have a form where I d like the user to add any amount of promo codes The closest native example of this is in the Cont
  • 文本字段中的 SwiftUI 颜色输入

    我遇到了 SwiftUI 的问题 当用户输入文本字段时 我需要将文本字段中的所有字母设置为红色 将所有数字设置为黑色 假设我有这个代码 TextField A99 text viewModel code padding trailing m
  • 如何将 UserDefaults 与 SwiftUI 结合使用?

    struct ContentView View State var settingsConfiguration Settings struct Settings var passwordLength Double 20 var moreSp
  • 将文件夹中所有文本文件中与模式匹配的行提取到单个输出文件

    我试图提取文件夹中所有文件中以 开头的每一行 然后将这些行复制到单独的文本文件中 目前在 PowerShell 代码中使用此代码 但我没有得到任何结果 files Get ChildItem folder Filter txt foreac
  • 从 SwiftUI 视图转至 UIViewController

    我正在努力将一些 SwiftUI 内容实现到我现有的应用程序中 我目前有一个 UIViewController 它托管一个用于相机预览的 MTKView 我创建了一个新的 SwiftUI 视图 它现在是我的root视图 如我的设置Scene

随机推荐