2015-06-20 28 views
12

我正在使用CloudKit构建iOS应用程序。已删除的CloudKit记录重新出现

它应该允许用户在云中添加,编辑和删除Products。用户可以在文件夹中组织这些文件。这些文件夹只是cloudkit中的其他记录类型。用户可以使用的文件夹级别没有限制,因为任何文件夹都可以只持有CKReference到其父文件夹。我的应用程序中的所有CloudKit通信都发生在专用的CloudKitController类中

这一切都有效,但在没有明确原因的一段时间后停止工作。

当我测试我的应用程序时,我甚至没有使用多级深度的文件夹。但是,使用一段时间(最多一周)后,所有已删除的记录似乎都会重新出现在CloudKit上。有几点关于此:

  • 当我重置我的CloudKit仪表板并重新开始,它的工作完美。没有更改代码。
  • 很明显,我在编写应用程序时经常编辑我的代码。但是,我通常不会编辑要存储在CloudKit中的代码中的数据类型。当我这样做时,这个问题不会在后来出现
  • CloudKit仪表板中的更改(例如添加数据类型)不会导致此问题
  • 不在本地存储任何记录(如在核心数据中)。只要我使用它们,它们就会坐在一个单例中
  • 当我转到CloudKit Dashboard时,产品记录类型显示它具有13个实例。有时候它太糟糕了,我的应用程序实际上加载了100多个。我还可以在进入recordZone时看到它们,但RecordType表示它只有13个实例
  • 在CloudKit Dashboard中删除这些记录只会使它们消失而。当我重新加载页面时,它们再次弹出。

它已经这样一段时间了,我已经检查了我的代码,苹果图书馆和谷歌很多次,但我无法弄清楚是什么原因造成这个问题。

问题: 有人会知道如何解决这个问题?正如我所说的,我已经遇到了这个问题好几个星期了,重置我的CloudKit仪表板只能“治愈”它长达一周的时间,然后再次弹出。如果这能帮助你回答我的问题,我也会很乐意发布任何代码。我最初没有发布任何代码,因为我不知道代码可能会导致这种情况。

任何答复将高度赞赏

+0

我一直有完全相同的问题。我一直试图删除其中一种记录类型,但记录在一段时间后仍然会回来,这是有问题的,因为记录类型实际上发生了变化(记录类型cloudkit显示实际上忽略了旧的和旧的新)。有多混乱。 – Narwhal

+0

很高兴知道,至少我不是唯一一个。在您的情况下,在您的应用程序或数据库中执行特定任务后会出现此问题吗? – Joris416

+0

我一直在搞乱一堆,所以我不确定。无论如何,我完全重置了数据库,并且自那以后我一直在努力。但是,如果已经保存了大量数据(迄今为止,我保存的任何内容都很重要并且可以清除),我不愿意这么做。 – Narwhal

回答

2

Apple回复了一个错误报告,我已经提出应该用iOS 9解决这个问题。到目前为止,这似乎是正确的,因为这个问题没有再次发生,但请让我知道这是否仍在困扰某人。

+2

这只是现在发生在我身上。删除的记录无法在仪表板中看到,但奇迹般地出现在我的应用程序中。 – DogCoffee

+0

是的,我也只是浪费了5个小时寻找我身边的一个bug。这个bug在IOS 9.3中仍然存在。重置开发环境解决了问题... – Prine

1

这可能发生,因为下面的仪表板跟踪表明苹果使用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" 
     } 
    }, 
    ... 

至于记录数,是的,我的也是不准确的。