SwiftUI NavigationLink立即向后导航

时间:2020-01-09 19:46:01

标签: navigation realm swiftui swiftui-navigationlink ios-navigationview

我正在使用SwiftUI从行创建NavigationLinks到NavigationView中的详细视图(类似于在教程https://developer.apple.com/tutorials/swiftui/building-lists-and-navigation中进行的操作)。但是,当我在应用程序中进行测试时,在点击后,NavgiationLink会立即从详细信息视图导航回到上一个视图(详细信息视图仅显示一秒钟)。

以下是代码:

struct ItemsView: View {
    var body: some View {
        NavigationView {
            VStack {
                List {
                    ForEach(Query.items) { item in
                        NavigationLink(destination: ItemDetail(item: item)) {
                            ItemRow(item: item)
                        }
                    }
                }
                Spacer()
            }
            .navigationBarTitle(Text("Items"))
        }
    }
}

private struct ItemRow: View {
    var item: Item

    var body: some View {
        VStack(alignment: .leading) {
            Text(item.title)
                .font(.headline)
            item.completionDate.map({
                Text("Created \($0.shortDateTime)")
            })
            item.completionDate.map({
                Text("Active \(Date().offsetString(from: $0)) ago")
            })
        }
    }
}

struct ItemDetail: View {
    var item: Item

    var body: some View {
        VStack {
            Text("\(item.title)")
            Text("\(String(describing: item.creationDate))")
            Text("\(String(describing: item.completionDate))")
            Text("\(item.complete)")
        }
        .navigationBarTitle(Text("Item"), displayMode: .inline)
    }
}

Query使用Realm完成:

let realm = try! Realm()

class Query {
    static let items = realm.objects(Item.self)
}

Results<Item>返回的realm.objects(Item.self)对象似乎可能有问题。当我使用let items = [Item(), Item()]对静态数据进行尝试,然后调用ForEach(items) { ... }时,导航按预期工作。

2 个答案:

答案 0 :(得分:0)

通过将ForEach(Query.items)更改为ForEach(Array(Query.items))以使数据静态来解决此问题。

答案 1 :(得分:-1)

原因是Superset[SubsetNames] <- Subset 缺少标识符。当您添加一个ForEach(Query.items, id: \.self)hashable时。列表应该像魅力一样工作。