6

Context Menu下に正しいデータが表示されているにもかかわらず、表示されているデータが間違っているという問題に直面していListます。問題は、最初のアイテムのコンテキスト メニューでアクションをトリガーListすると、正しいデータが再レンダリングされて表示される様子を確認できますが、最初のアイテムのコンテキスト メニューを再度トリガーすると、正しい状態。2 番目の項目のコンテキスト メニューを開くと、正しい状態が表示されますが、ここで "Two" を選択して同じコンテキスト メニューを開くと、State間違った状態になります (表示されるはずのときに、選択された 1 つだけが表示されます)。 1 & 2、List表示のように)。

1つずれているように感じます(最新の状態ではなく以前の状態を提示するなど)。それが単なるバグなのか、それとも間違った使い方をしているのかわかりません。

問題を再現するコードのスニペットを次に示します。

@main
struct ContextMenuBugApp: App {
    
    let availableItems = ["One", "Two", "Three", "Four", "Five"]
    @State var selectedItems: [String] = []
    
    var body: some Scene {
        WindowGroup {
            List {
                ForEach(availableItems, id: \.self) { item in
                    HStack {
                        let isAlreadySelected = selectedItems.contains(item)
                        Text("Row \(item), selected: \(isAlreadySelected ? "true" : "false")")
                    }.contextMenu {
                        ForEach(availableItems, id: \.self) { item in
                            let isAlreadySelected = selectedItems.contains(item)
                            Button {
                                isAlreadySelected ? selectedItems.removeAll(where: { $0 == item }) : selectedItems.append(item)
                            } label: {
                                Label(item, systemImage: isAlreadySelected ? "checkmark.circle.fill" : "")
                            }
                        }
                    }
                }
            }
        }
    }
}

問題を示すビデオ: https://twitter.com/xmollv/status/1412397838319898637

ありがとう!

編集:

iOS 15 のリグレッション (少なくともリリース候補版) のようですが、iOS 14.6 では問題なく動作します。

4

1 に答える 1