5

我正在使用在 NavigationViewSwiftUI中创建从行到详细视图(类似于教程https://developer.apple.com/tutorials/swiftui/building-lists-and-navigationNavigationLinks中所做的)。但是,当我在我的应用程序中进行测试时,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) { ... }时,导航按预期工作。

4

2 回答 2

3

ForEach(Query.items)通过更改为ForEach(Array(Query.items))使数据静态来修复它。

于 2020-01-09T21:01:37.177 回答
-1

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

于 2020-01-09T20:04:45.827 回答