swift 了解手表应用何时收到来自Cloudkit的推送通知

plicqrtu  于 2023-11-16  发布在  Swift
关注(0)|答案(1)|浏览(97)

我有一个应用程序,有一个苹果手表扩展。
两者都使用核心数据。
我在这两个方面都启用了CloudKit功能。
我已经按照here所述配置了这两个应用程序
我打开iOS应用程序,更改数据库,但手表上什么也没发生。我的意思是,结果不会在手表上更新。
两个问题:
1.我必须做些什么才能从iCloud推送或接收通知吗?
1.我如何知道手表何时收到来自iCloud的通知?这是调试此问题的方法吗?

mum43rcc

mum43rcc1#

我已经配置了我的iOS和Watch应用程序,100%遵循苹果在我提到的文档中所写的内容,并且这些应用程序没有通过CloudKit同步。
解决方案是将PersistenceController修改为:

import CoreData

struct PersistenceController {
  static let shared = PersistenceController()
  let container: NSPersistentCloudKitContainer
  
  var context: NSManagedObjectContext {
    return container.viewContext
  }
  
  init(inMemory: Bool = false) {
    container = NSPersistentCloudKitContainer(name: "MyApp")
    container.viewContext.automaticallyMergesChangesFromParent = true
    container.viewContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy

    guard let description = container.persistentStoreDescriptions.first else{
      fatalError("###\(#function): Failed to retrieve a persistent store description.")
    }
    
    description.setOption(true as NSNumber, forKey: NSPersistentHistoryTrackingKey)
    
    // Generate NOTIFICATIONS on remote changes
    description.setOption(true as NSNumber, forKey: NSPersistentStoreRemoteChangeNotificationPostOptionKey)
    description.cloudKitContainerOptions = NSPersistentCloudKitContainerOptions(containerIdentifier: "iCloud.com.myCompany.MyApp")

    
    if inMemory {
      container.persistentStoreDescriptions.first!.url = URL(fileURLWithPath: "/dev/null")
    }

    container.loadPersistentStores(completionHandler: { (storeDescription, error) in
      if let error = error as NSError? {
        fatalError("Unresolved error \(error), \(error.userInfo)")
      }
    })
  }
}

字符串
然后从iPhone和Watch中删除应用程序并再次运行。它将立即工作。

相关问题