【问题标题】:How to add a parent to CKRecord before NSPersistentCloudKitContainer will sync it?如何在 NSPersistentCloudKitContainer 同步之前向 CKRecord 添加父级?
【发布时间】:2020-07-20 17:19:50
【问题描述】:

NSPersistentCloudKitContainer 会自动为 NSManagedObjects 创建所有 CKRecords,所以...

如何在同步更改之前访问此进程并设置 CKRecord.parent。

我需要 B 类型的每个 CKRecord 都有 A 类型的父记录,但要避免完全手动处理 setParent(:) 作为完全独立的机制。

【问题讨论】:

    标签: core-data cloudkit nspersistentcloudkitcontainer


    【解决方案1】:

    保存到Core Data后,可以通过NSPersistentCloudKitContainer提供的函数读取here获取CKRecord。

    例如,您可以使用 CKModifyRecordsOperation 将 parent 设置为记录并将其保存到数据库,是的,您必须使用 CloudKit 操作才能工作。

    【讨论】:

    • 我已经创建了这样的机制,它似乎过于复杂。原因如下: 1. 我创建 NSManagedObject(还没有对象的 CKRecord) 2. 保存上下文(CKRecord 仅在互联网可用时才出现!,否则没有 CKRecord。3. 即使互联网可用,镜像已经在当前上下文中开始同步保存 4. 我的 CKModifyRecordsOperation 在这里启动
    • 如果互联网可用,这种方法的失败率约为 5%。如果不是,我已经创建了代码,它使用“hasRemoteParent”属性(我已经创建)获取所有对象并处理它们。我在 NWMonitor 处理程序中启动它。镜像也在做同样的事情,如果我在互联网恢复时获取上下文,CloudKit 镜像就会中断,我再也看不到互联网了。这只是一场噩梦,我无法战胜镜像失败并从头开始完全创建同步(无论如何我必须为 sharedCloudDatabase 这样做。
    • 嗯,是的,这很复杂,但如果没有可用的互联网,您可以在应用程序运行之前监听网络变化,一旦互联网可用,您就可以同步到共享数据库。
    • 正如我在上面的评论中所说,我已经这样做了。我用 NWPathMonitor 收听互联网(我弄错了,输入了 NWMonitor)。当我在互联网恢复时进行上下文提取时,镜像就会死掉(不知道为什么)。我可以使用 CloudKit 进行任何操作,但 Apple 的镜像永远不会同步,因为这会失败,直到重新启动应用程序,并说“可能没有互联网”。所以,你提出的一切都已经完成,可以工作,但是会导致镜像失败的愚蠢错误。无论如何感谢您的宝贵时间,我很高兴知道有什么新想法,但我已经尝试了所有我认为的方法。
    • 这真的很奇怪,我不知道为什么会这样。我从未在我的应用程序中遇到过这种情况..
    猜你喜欢
    • 1970-01-01
    • 2011-02-09
    • 2021-07-26
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多