SwiftUI NavigationLink немедленно перемещается назад - PullRequest
0 голосов
/ 09 января 2020

Я использую 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). Когда я попробовал это с данными * stati c, используя let items = [Item(), Item()] и затем вызвав ForEach(items) { ... }, навигация работала как ожидалось.

Ответы [ 2 ]

0 голосов
/ 10 января 2020

Исправлено, изменив ForEach(Query.items) на ForEach(Array(Query.items)), чтобы сделать данные c.

0 голосов
/ 09 января 2020

Причина: ForEach(Query.items, id: \.self) отсутствует идентификатор. Когда вы добавляете один hashable или \.self. Список должен работать как шарм.

...