ios - SwiftUI View Code 似乎被调用了两次。这里有什么问题?
问题描述
.sheet
我有一个在 SwiftUI中被调用的视图。但是,当显示此工作表时,我在控制台中收到调试“Tapped”打印,然后出现以下错误:
Warning: Attempt to present <_TtGC7SwiftUIP13$7fff2c9bdf5c22SheetHostingControllerVS_7AnyView_: 0x7f8f1d7400f0> on <_TtGC7SwiftUI19UIHostingControllerVVS_22_VariadicView_Children7Element_: 0x7f8f17e0dae0> which is already presenting (null)
我不确定是什么导致了这个错误,但据我了解,这是由于视图被调用了两次。我不确定视图是如何被调用两次的,或者即使是,这就是我在这里问的原因。下面是实际包含我的列表的 NavigationView 的主视图
struct AllTablesView: View {
@Environment(\.managedObjectContext) var managedObjectContext
@FetchRequest(fetchRequest: Table.getAllTables()) var tables: FetchedResults<Table>
@State private var tableTapped: Table = Table()
@State private var isModal = false
var body: some View {
NavigationView {
List {
ForEach(self.tables) { table in
tableCellView(tableNumber: table.number, clean: table.clean, inUse: table.inUse)
.onTapGesture {
self.tableTapped = table
self.isModal = true
print("tapped")
}
}
.onDelete { indexSet in
let deletedTable = self.tables[indexSet.first!]
self.managedObjectContext.delete(deletedTable)
do {
try self.managedObjectContext.save()
} catch {
print(error)
}
}
.sheet(isPresented: $isModal){
TableStatusView(table: self.tableTapped)
.environment(\.managedObjectContext, self.managedObjectContext)
}
}
.navigationBarTitle("All Tables")
.navigationBarItems(leading: EditButton(), trailing:
HStack {
DeleteAllTablesButton()
AddTableButton()
})
}
}
}
而且,无论出于何种原因,这是问题所在,这是我的视图代码,标题为“TableStatusView”
struct TableStatusView: View {
@Environment(\.managedObjectContext) var managedObjectContext
@FetchRequest(fetchRequest: Table.getAllTables()) var tables: FetchedResults<Table>
@State var table: Table
var body: some View {
VStack {
Form {
Section {
Text("Table \(table.number)")
}.padding(.all, 10.0)
Section {
Toggle(isOn: $table.inUse) {
Text("In Use")
}.padding(.all, 10.0)
Toggle (isOn: $table.clean) {
Text("Clean")
}.padding(.all, 10.0)
}
}
}
}
}
我收到此错误是否有原因,或者为什么我的视图被调用了两次?它实际上是被调用了两次还是我在这里做错了什么?我知道我的代码的某些部分可能会被缩小或写得更好,但这只是我第一次深入 SwiftUI,除了基本的东西之外我没有太多的经验。谢谢!
解决方案
我从来没有找到问题的解决方案,但我确实解决了 NavigationLink 问题并换回使用它。我正在使用“.onTapGesture”来获得一个点击手势,然后生成一个 NavigationLink,认为这是一个动作。我了解到,NavigationLink 实际上或多或少是一个容纳内容的容器,因此我将 .onTapGesture 和 TableCellView() 函数调用替换为以下内容:
NavigationLink(destination: TableStatusView(table: table)) {
tableCellView(tableNumber: table.number, clean: table.clean, inUse: table.inUse)
}
并为我解决了这个问题。我仍然看到一些错误,但从一些 google-fu 发现它们是 SwiftUI 的当前错误。SwiftUI 2.0 可能会修复其中一些问题
推荐阅读
- javascript - React Native Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 0
- react-native - 如何查看 Lottie 文件的版本?
- domain-driven-design - DDD - 如何在实体必须引用非根实体的情况下形成聚合
- firebase - Firebase 删除用户数据扩展是否能够删除已删除用户子集合中的所有文档?
- python - 如何解决图像文件上传,检查是否上传的天气,如果在 python 中上传成功问题,则显示一个弹出窗口?
- ios - 不确定将代码放在程序中的什么位置。如何在 XCode 中通过触摸生成圆圈。(目标-C)
- google-apps-script - 如何自动删除 Google 表格特定列中电话号码中的多余字符?
- javascript - ChartJS 缩放功能,如 ChartIQ
- node.js - 由于导入导出方法,模块未定义错误
- .net - 实体框架多对多导航到子,然后返回父