gpt4 book ai didi

core-data - NSPersistentStore 远程更改通知没有被触发

转载 作者:行者123 更新时间:2023-12-01 12:04:26 29 4
gpt4 key购买 nike

我正在尝试在我的 CoreData+CloudKit 项目中执行历史跟踪,该项目使用 NSPersistentCloudKitContainer .我一直在关注 Apple 的 sample project

我想在远程存储更新后执行某些任务。为此,苹果建议在应用程序的签名和功能的后台模式部分启用远程通知。

我已经为我的项目启用了历史跟踪,如 Apple 的示例项目所示。

    // turn on persistent history tracking
let description = container.persistentStoreDescriptions.first
description?.setOption(true as NSNumber,
forKey: NSPersistentHistoryTrackingKey)

// ...

我还注册了我的商店来监听商店的变化。
    // turn on remote change notifications
let remoteChangeKey = "NSPersistentStoreRemoteChangeNotificationOptionKey"
description?.setOption(true as NSNumber,
forKey: remoteChangeKey)

// ...

还添加了观察者来监听 NSPersistentStoreRemoteChangeNotification .

但是没有 NSPersistentStoreRemoteChangeNotification被解雇。为了确保我的实现没有错误,我只是在 @objc func storeRemoteChange(_ notification: Notification) 中放置了断点Apple 提供的示例代码,但我仍然看不到任何通知被触发,也没有激活断点。

我已经了解了示例项目中完成的标签重复数据删除,也尝试对其进行测试,但没有成功。这是 Apple 实现中的错误还是我缺少任何必需的设置?

最佳答案

我的猜测是你正在观察容器而不是商店协调器,像这样添加你的观察者:

    NotificationCenter.default.addObserver(
self, selector: #selector(type(of: self).storeRemoteChange(_:)),
name: .NSPersistentStoreRemoteChange, object: container.persistentStoreCoordinator)

注意最后一个参数 container.persistentStoreCoordinator
还有一个警告,这个通知出现在所有不同的线程上,所以你要小心并发。只需在方法中放置 5 秒 sleep ,您就会在应用启动时看到 3 个不同的线程调用它。这可能是示例中出现 historyQueue 的原因。与 maxOperationCount 1 来处理。

一些通知有 NSPersistentHistoryTokenKeyuserInfo不知道为什么。

关于core-data - NSPersistentStore 远程更改通知没有被触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59158513/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com