Swiftui - Сбои навигацииSplitView в ландшафтном режиме на iPad (iOS 16.2)
Я работаю над приложением для iPhone и iPad и хочу использовать NavigationSplitView. При работе на iPad в альбомной ориентации я сталкиваюсь с сбоем iOS 16.2, который не могу понять.
В этом примере вы можете воспроизвести сбой на iPad в ландшафтном режиме следующим образом: сначала выберите «Джордж», а затем нажмите на его книгу «Большая книга» (последняя в списке для него). Затем выберите «Лука». Нажмите на его первую запись в книге («Скучная книга»). На этом этапе происходит сбой всего приложения. я получаю
Поток 1: EXC_BREAKPOINT (код =1, субкод =0x105c9fe94)
(конечно, точка останова не установлена).
Любая помощь будет принята с благодарностью!!
КБ
Это код (вы можете вставить его прямо в новый проект):
//
// ContentView.swift
// test
//
import SwiftUI
struct Member:Hashable, Identifiable {
var id: Int
var name: String
}
struct Book:Hashable, Identifiable {
var id: Int
var memberId: Int
var name: String
}
struct ContentView: View {
@State private var memberID: Member.ID? // Single selection.
@State private var bookID: Book.ID? // Single selection.
@State private var columnVisibility = NavigationSplitViewVisibility.all
var members = [
Member(id:1, name:"George"),
Member(id:2, name:"John"),
Member(id:3, name:"Luca"),
]
var books
= [
Book(id:1,memberId:1, name:"A good Book"),
Book(id:2, memberId:1, name:"Another great Book"),
Book(id:3, memberId: 1, name:"Very good Book"),
Book(id:4,memberId:1, name:"Lame Book"),
Book(id:5, memberId:1, name:"Big Book"),
Book(id:6, memberId: 2, name:"Small Book"),
Book(id:7,memberId:2, name:"Green Book"),
Book(id:8, memberId:2, name:"Yellow Book"),
Book(id:9, memberId: 3, name:"Boring Book"),
Book(id:10, memberId: 3, name:"Best Book"),
]
var body: some View {
NavigationSplitView(columnVisibility: $columnVisibility) {
List(members, selection: $memberID) { member in
HStack{
Text("ID: \(member.id)")
Text("Name: \(member.name)")
}
} //List
} content: {
if memberID == nil {
Text("select")
} else {
List(books.filter({ $0.memberId == memberID }), selection: $bookID) { book in
Text(book.name)
} //List
} //else
} detail: {
Text("Details")
}// detail
.onChange(of: memberID){ _ in
bookID = nil
}
} // body
}
Похоже, это как-то связано с тем, что список участника 1 длиннее, чем список участника 3. Значения элемента 3 в порядке, и их можно выбрать, если вы перейдете туда напрямую.
Я следовал документации разработчика и различным руководствам. Я искал SO, но не нашел этой конкретной проблемы. Я, наверное, что-то упускаю.