已删除 CloudKit 条记录重新出现
Deleted CloudKit records Reappear
我正在使用 CloudKit 构建一个 iOS 应用程序。
它应该允许用户在云中添加、编辑和删除 Products
。用户可以在文件夹中组织这些。这些文件夹只是 cloudkit 中的其他记录类型。用户可以使用的文件夹级别没有限制,因为任何文件夹只能将 CKReference
保存到其父文件夹。我的应用程序中的所有 CloudKit 通信都发生在专用的 CloudKit 控制器 Class
中
这一切都有效,但一段时间后没有明确原因停止工作。
当我测试我的应用程序时,我什至没有多层深度的用户文件夹。但是,在使用一段时间后(最多一周),所有删除的记录似乎都重新出现在 CloudKit 上。对此有几点说明:
- 当我重置 CloudKit 仪表板并重新开始时,它运行良好。未更改代码。
- 显然,随着应用程序的开发,我不断地编辑我的代码。但是,我通常不会在我的代码中编辑要存储在 CloudKit 中的数据类型。当我这样做时,这个问题不会在之后直接出现
- CloudKit 仪表板中的更改(例如添加数据类型)不会导致此问题
- 我没有在本地存储任何记录,就像在核心数据中一样。只要我使用它们,它们就坐在单例中
- 当我转到 CloudKit 仪表板时,产品记录类型显示它有例如13 个实例。有时它是如此糟糕,以至于我的应用程序实际上加载了 100 多个。当我转到 recordZone 时我也可以看到它们,但 RecordType 仍然说它只有 13 个实例
- 删除 CloudKit 仪表板中的这些记录只会使它们消失一段时间。当我重新加载页面时,它们再次弹出。
这种情况已经有一段时间了,我已经检查了我的代码、Apple Library 和 google 无数次,但我无法弄清楚是什么原因导致了这个问题。
问题:
有人知道如何解决这个问题吗?就像我说的,我已经 运行 进入这个领域好几个星期了,并且只重置我的 CloudKit 仪表板 'cures' 它长达一个星期,然后它再次弹出。如果可以帮助您回答我的问题,我也非常乐意 post 任何代码。我一开始没有 post 编写任何代码,因为我不知道是什么代码导致了这种情况。
任何答案将不胜感激
这可能会发生,因为下面的仪表板跟踪表明 Apple 使用 Tombstone 技术在分布式数据库中复制删除。其中一个节点可能有错误或旧软件版本,并且正在跨系统同步墓碑错误字段,导致记录自行取消删除。或者也许您的代码正在做的事情是不小心使这些已删除的记录恢复生机?解决方法是使用您自己的软删除布尔字段并查看其行为方式。
[{
"results": [{
"tombstone": false
"id": "NewItem",
"etag": "ibgs5bpj",
"recordType": "Items",
"fields": {
"name": "Malc",
"location": {
"latitude": 38.0,
"longitude": -122.0
}
},
"conflictLosersEtags": [],
"created": {
"timestamp": 1435514295943,
"user": "_0ac573ae502ca7ca9d763a84b27bc42a",
"device": "_2"
},
"modified": {
"timestamp": 1435514295943,
"user": "_0ac573ae502ca7ca9d763a84b27bc42a",
"device": "_2"
}
},
...
至于记录数,是的,我的也不准确。
Apple 回复了我提交的错误报告,该问题应通过 iOS9 解决。到目前为止,这似乎是正确的,因为此问题没有再次发生,但请告诉我如果这仍然困扰着某人。
我正在使用 CloudKit 构建一个 iOS 应用程序。
它应该允许用户在云中添加、编辑和删除 Products
。用户可以在文件夹中组织这些。这些文件夹只是 cloudkit 中的其他记录类型。用户可以使用的文件夹级别没有限制,因为任何文件夹只能将 CKReference
保存到其父文件夹。我的应用程序中的所有 CloudKit 通信都发生在专用的 CloudKit 控制器 Class
这一切都有效,但一段时间后没有明确原因停止工作。
当我测试我的应用程序时,我什至没有多层深度的用户文件夹。但是,在使用一段时间后(最多一周),所有删除的记录似乎都重新出现在 CloudKit 上。对此有几点说明:
- 当我重置 CloudKit 仪表板并重新开始时,它运行良好。未更改代码。
- 显然,随着应用程序的开发,我不断地编辑我的代码。但是,我通常不会在我的代码中编辑要存储在 CloudKit 中的数据类型。当我这样做时,这个问题不会在之后直接出现
- CloudKit 仪表板中的更改(例如添加数据类型)不会导致此问题
- 我没有在本地存储任何记录,就像在核心数据中一样。只要我使用它们,它们就坐在单例中
- 当我转到 CloudKit 仪表板时,产品记录类型显示它有例如13 个实例。有时它是如此糟糕,以至于我的应用程序实际上加载了 100 多个。当我转到 recordZone 时我也可以看到它们,但 RecordType 仍然说它只有 13 个实例
- 删除 CloudKit 仪表板中的这些记录只会使它们消失一段时间。当我重新加载页面时,它们再次弹出。
这种情况已经有一段时间了,我已经检查了我的代码、Apple Library 和 google 无数次,但我无法弄清楚是什么原因导致了这个问题。
问题: 有人知道如何解决这个问题吗?就像我说的,我已经 运行 进入这个领域好几个星期了,并且只重置我的 CloudKit 仪表板 'cures' 它长达一个星期,然后它再次弹出。如果可以帮助您回答我的问题,我也非常乐意 post 任何代码。我一开始没有 post 编写任何代码,因为我不知道是什么代码导致了这种情况。
任何答案将不胜感激
这可能会发生,因为下面的仪表板跟踪表明 Apple 使用 Tombstone 技术在分布式数据库中复制删除。其中一个节点可能有错误或旧软件版本,并且正在跨系统同步墓碑错误字段,导致记录自行取消删除。或者也许您的代码正在做的事情是不小心使这些已删除的记录恢复生机?解决方法是使用您自己的软删除布尔字段并查看其行为方式。
[{
"results": [{
"tombstone": false
"id": "NewItem",
"etag": "ibgs5bpj",
"recordType": "Items",
"fields": {
"name": "Malc",
"location": {
"latitude": 38.0,
"longitude": -122.0
}
},
"conflictLosersEtags": [],
"created": {
"timestamp": 1435514295943,
"user": "_0ac573ae502ca7ca9d763a84b27bc42a",
"device": "_2"
},
"modified": {
"timestamp": 1435514295943,
"user": "_0ac573ae502ca7ca9d763a84b27bc42a",
"device": "_2"
}
},
...
至于记录数,是的,我的也不准确。
Apple 回复了我提交的错误报告,该问题应通过 iOS9 解决。到目前为止,这似乎是正确的,因为此问题没有再次发生,但请告诉我如果这仍然困扰着某人。