【发布时间】:2022-01-26 04:06:57
【问题描述】:
由于某种原因,我无法显示在 ForEach 循环中调用自身的 SwiftUI 视图。应用程序在尝试显示此视图时挂起然后崩溃:
struct LoopView: View {
let loop: Loop
var body: some View {
HStack {
Text(String(loop.multiplier))
.font(.title)
Text("x")
VStack {
// ### THE PROBLEM IS HERE ###
if let loops = loop.loops {
ForEach(loops, id: \.id) { innerLoop in
// Text(String(innerLoop.multiplier)) // << This works
LoopView(loop: innerLoop) // << This causes the system to hang
}
} else {
// This stuff here is fine
if let components = loop.components {
ForEach(components, id: \.id) { component in
ComponentView(component: component)
}
}
}
}
}
}
}
struct LoopView_Previews: PreviewProvider {
static let moc = DataController.preview.container.viewContext
static var previews: some View {
let outterLoop = Loop(context: moc)
outterLoop.id = UUID()
outterLoop.multiplier = 5
outterLoop.addToInternalLoops(DataController.exampleLoop())
// vvv Does not change outcome if commented out vvv
outterLoop.addToInternalLoops(DataController.exampleLoop())
return LoopView(loop: outterLoop)
}
}
根据 cmets,我可以很好地访问循环项目的属性,这意味着循环没有任何问题,并且可以访问元素。但是,我无法递归使用我的loop。 innerLoop 不包含 loop 意味着它只会在深入一层后停止递归。
我使用的是 Xcode 13.2.1。感谢您的帮助!
【问题讨论】:
-
这是关于
Loop或ComponentView类型的尝试猜测问题吗? -
这是关于
Loop。ComponentView很好。 -
DataController.exampleLoop()在每次调用时返回相同的 Loop 对象还是一个新对象? -
同一个。它被添加到
NSOrderedSet(默认Core Data 一对多关系)。如果只添加一个,则没有区别。 -
所以你有一个一对多的关系,在一个方向上命名为
internalLoops,在另一个方向上命名为loops,这是正确的,如果是,那是哪个?
标签: swift recursion core-data swiftui