Нечетное поведение оповещения в приложении Catalyst с SwiftUI при публикации таймера - PullRequest
0 голосов
/ 29 марта 2020

Я создаю приложение iOS в SwiftUI и надеюсь запустить его на Ma c также с использованием Catalyst. Одна вещь, которую я делаю, это отслеживание прошедшего времени и отображение его на ярлыке на экране; Для этого я использую издатель Timer и обновляю переменную в своей модели каждый раз, когда она запускается. (Если есть лучший способ сделать это, я открыт для этого.) У меня также есть возможность показывать предупреждение, которое в приложении iOS является стандартным предупреждением, а в приложении Ma c оно отображает на листе, что хорошо. Вот некоторый код - в этом примере я просто показываю счетчик, а не значение, отформатированное как время, для простоты:

class Model: ObservableObject {
    @Published var presentAlert = false
    @Published var count = 0
    var cancellables = Set<AnyCancellable>()

    init() {
        Timer.publish(every: 1.0, on: .main, in: .common)
            .autoconnect()
            .map { [unowned self] _ in self.count + 1 }
            .assign(to: \.count, on: self)
            .store(in: &cancellables)
    }
}

struct ContentView: View {
    @ObservedObject var model: Model

    var body: some View {
        VStack(spacing: 16) {
            Text("Count: \(model.count)")
            Button("Show Alert") {
                self.model.presentAlert.toggle()
            }
        }
        .alert(isPresented: $model.presentAlert) {
            Alert(title: Text("New Game"),
                  message: Text("Are you sure you want to start a new game? The current game will be recorded as a loss."),
                  primaryButton: Alert.Button.destructive(Text("New Game")) {
                    print("New Game selected")
                  },
                  secondaryButton: Alert.Button.cancel()
            )
        }
    }
}

В приложении iOS все работает так, как нужно - одно предупреждение показывает когда пользователь нажимает кнопку оповещения, и она может быть отклонена. Но я заметил, что в приложении Ma c Catalyst, когда отображается предупреждение, если пользователь не взаимодействовал с предупреждением, то каждый раз, когда срабатывает таймер, лист предупреждения пытается повторно представить себя или создает свое собственное содержание странно. Например, ниже приведен скриншот приложения сразу после того, как пользователь нажал «Показать оповещение»:

One И через одну секунду, когда таймер снова срабатывает, появляется предупреждение обновил сам себя:

Two А через секунду он снова обновился ... enter image description here

И так

Я что-то не так делаю, или это ошибка в Catalyst и SwiftUI?

...