Перезагрузить / обновить сцену после получения удаленного уведомления swiftUI

У меня такая проблема. Я получаю уведомление от CloudKit с помощью application: didReceiveRemoteNotification в AppDelegate. Я могу получить recordId, извлечь его и успешно сохранить. Проблема в том, что сцена не обновляется.

final class UserData: ObservableObject {
@Published var items: [Item] = []

func saveFetchedItem(recordId: CKRecord.ID, reason: CKQueryNotification.Reason) {
    fetchAndSaveRemoteDataFromCloudKit(recordId: recordId, reason: reason, userData: self)
  }
}

в AppDelegate:

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
   let notification: CKNotification = CKNotification(fromRemoteNotificationDictionary: userInfo)!

   if notification.notificationType == .query {
      let queryNotification = notification as! CKQueryNotification
      let recordId = queryNotification.recordID                

       let reason: CKQueryNotification.Reason = queryNotification.queryNotificationReason
        /// reasons:
        /// .recordCreated, .recordUpdated, .recordDeleted
        UserData().saveFetchedItem(recordId: recordId!, reason: reason)

        }
        completionHandler(.newData)
    }

В fetchAndSaveRemoteDataFromCloudKit я передаю UserData, чтобы сохранить полученный элемент, и он работает. Проблема в том, что я показываю элементы в списке, и список не обновляется, даже когда я печатаю userData.items и там есть новый элемент.

Есть ли связь между AppDelegate и SceneDelegate для обновления сцены / окна?


person amervil    schedule 17.12.2019    source источник
comment
Вы нашли решение?   -  person Ryuuzaki Julio    schedule 16.08.2020