由于beta 5的Xcode 11推出,我不得不更新代码。你知道该怎么做。但是,这种怪异的运行时错误仍在更改中幸免,我无法弄清为什么会发生。
我开始尝试将其纳入原始代码中,但是令人惊讶的是,它也发生在我设法提出的最简单的测试项目中:一个带有表的TabView。
在运行时更改为另一个选项卡时,使Xs模拟器崩溃并导致SIGABRT的过程是错误的:
“ xxxxxxx [23089:4642999]前提条件失败:导入的节点在读取其值之前已删除:90”
如果用户连续单击进入detailview,它不会崩溃;只需运行该应用程序,然后按第二个选项卡即可。
我已经修改了视图建筑物,对象……什么也没有。将行视图更改为简单的文本时,它甚至崩溃。我还删除了@Binding等,以排除Combine。
请让我知道你们中是否有人看到东西。它只会在Beta 5中崩溃,而不会在Beta 2中崩溃。
// This file can be used in a new TabView app in Xcode 11 beta 5
// ContentView.swift
import SwiftUI
class TestObject : Identifiable, Hashable{
let identifier: String
init() {
self.identifier = UUID().description
}
static func == (lhs: TestObject, rhs: TestObject) -> Bool {
return lhs.identifier == rhs.identifier
}
func hash(into hasher: inout Hasher) {
hasher.combine(identifier)
}
}
struct RowView: View {
let …Run Code Online (Sandbox Code Playgroud) 我想知道在SwiftUI(我撰写本文时为Xcode 11 beta 6)中onAppear和Disappear的行为是开发人员会发现更有用的东西,还是仅仅是一个问题而不是功能。
现在,如果我们使用级联导航,就像您在我附加的示例代码中发现的那样(在Xcode 11b6中编译并运行良好),则来回导航的用户的控制台输出只会在出现以下情况时触发onAppear:向前的新视图加载(意味着更深入)。
在导航中:根-> NestedView1-> NestedView2-> NestedView3,在向每个视图阶段添加调试助手时,
.onAppear(perform: {print("onAppear level N")})
.onDisappear(perform: {print("onDisappear level N")})
Run Code Online (Sandbox Code Playgroud)
调试控制台将显示
onAppear root level 0
onAppear level 1
onAppear level 2
onAppear level 3
(没有onDisappear触发)
但是返回根<-NestedView1 <-NestedView2 <-NestedView3
调试控制台将不显示任何内容
(没有onAppear或onDisappear触发)
struct NestedViewLevel3: View {
@Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
var body: some View {
VStack {
Spacer()
Text("Level 3")
Spacer()
Button(action: {
self.presentationMode.wrappedValue.dismiss()
}) {
Text("Back")
.padding(.horizontal, 15)
.padding(.vertical, 2)
.foregroundColor(Color.white)
.clipped(antialiased: true)
.background(
RoundedRectangle(cornerRadius: 20)
.foregroundColor(Color.blue)
.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, …Run Code Online (Sandbox Code Playgroud)