提问人:Duck 提问时间:11/7/2023 更新时间:11/7/2023 访问量:32
了解手表应用何时收到来自 Cloudkit 的推送通知
Knowing when the watch app receives a push notification from Cloudkit
问:
我有一个具有 Apple Watch 扩展程序的 App。
两者都使用核心数据。
我已经在两者上启用了 CloudKit 功能。
我已经按照此处所述配置了这两个应用程序
我打开 iOS 应用程序,更改数据库,但手表上没有任何反应。我的意思是,结果不会在手表上更新。
两个问题:
- 我是否必须执行某些操作才能推送或接收来自 iCloud 的通知?
- 我如何知道手表何时收到来自 iCloud 的通知?这是调试它的方法吗?
答:
0赞
Duck
11/7/2023
#1
我已经按照 Apple 在我提到的文档中所写的内容 100% 配置了我的 iOS 和 Watch 应用程序,并且这些应用程序没有通过 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 中删除应用程序并再次运行。它将立即起作用。
评论