Problem
When app is run on iPhone 14 pro simulator running iOS 17 tapping on the EditButton shows the text "No folder selected"
Feedback
Feedback ID: FB12953838
Steps to reproduce:
- Run the app on iOS 17 iPhone simulator
- Tap on the "Edit" Button
Expected Behaviour
The view should show the car list in the edit mode
Actual Behaviour
The view shows the text "No folder selected"
Note: Problem happens only the first time, subsequently EditButton works fine.
Environment:
- iOS: 17
- Platform: iPhone 14 pro simulator
- Xcode: 15.0 beta 6 (15A5219j)
Code
ContentView
import SwiftUI
struct ContentView: View {
@State private var selectedFolderID: Int?
@StateObject private var dataStore = DataStore()
var body: some View {
NavigationSplitView {
FolderListView(
selectedFolderID: $selectedFolderID,
dataStore: dataStore
)
} detail: {
if let selectedFolderID {
CarListView(
selectedFolderID: selectedFolderID,
dataStore: dataStore
)
} else {
Text("No folder selected")
}
}
}
}
FolderListView
import SwiftUI
struct FolderListView: View {
@Binding var selectedFolderID: Int?
@ObservedObject var dataStore: DataStore
var body: some View {
List(dataStore.folders, selection: $selectedFolderID) { folder in
NavigationLink(value: folder.id) {
Text(folder.name)
}
}
.task {
selectedFolderID = dataStore.folders.first?.id
}
}
}
CarListView
import SwiftUI
struct CarListView: View {
let selectedFolderID: Int
@ObservedObject var dataStore: DataStore
@State private var selectedCarIDs = Set<Int>()
var body: some View {
List(
dataStore.cars(withFolderID: selectedFolderID),
selection: $selectedCarIDs
) { car in
Text(car.name)
}
.toolbar {
//Tapping on the EditButton on the iPhone, shows the text "No folder selected".
EditButton()
}
}
}
DataStore
import Foundation
class DataStore: ObservableObject {
@Published var folders = [Folder(id: 0, name: "Folder 1"),
Folder(id: 1, name: "Folder 2"),
Folder(id: 2, name: "Folder 3"),
Folder(id: 3, name: "Folder 4"),
Folder(id: 4, name: "Folder 5")]
@Published var carIDsInFolder: [Folder.ID : [Car.ID]] = [0: [0, 1],
1: [2, 3],
2: [4, 5],
3: [6, 7],
4: [8, 9]]
@Published var cars = [Car(id: 0, name: "aaa", price: 100),
Car(id: 1, name: "bbb", price: 110),
Car(id: 2, name: "ccc", price: 120),
Car(id: 3, name: "ddd", price: 130),
Car(id: 4, name: "eee", price: 140),
Car(id: 5, name: "fff", price: 150),
Car(id: 6, name: "iii", price: 160),
Car(id: 7, name: "jjj", price: 170),
Car(id: 8, name: "***", price: 180),
Car(id: 9, name: "lll", price: 190)]
func cars(withFolderID folderID: Folder.ID) -> [Car] {
let carIDs = carIDsInFolder[folderID] ?? []
return carIDs.compactMap { car(withID: $0) }
}
func car(withID carID: Car.ID) -> Car? {
cars.first { $0.id == carID }
}
}
Car
import Foundation
struct Car: Identifiable {
var id: Int
var name: String
var price: Int
}
Folder
import Foundation
struct Folder: Identifiable {
var id: Int
var name: String
}