Reputation: 4882
I'm building an iOS application using CloudKit.
It should allow a user to add, edit and delete Products
in the cloud. The user can organize these in Folders. These folders are just other Record Types in cloudkit. There is no limit to the levels of folder the user can use, as any folder can just hold a CKReference
to it's parent Folder. All CloudKit communication in my app happens in a dedicated CloudKitController Class
This all works, but stops working after a while for no clear reason.
When I test my app, I don't even user folders that are multiple levels deep. However, after using it a while (up to a week), All deleted records seem to reappear on CloudKit. A couple of notes on this:
It has been going like this for a while now, and I have checked my code, the Apple Library and google numerous of times but I cannot figure out what causes this issue.
Question: Would anyone know anything on how to overcome this issue? As I said, I've been running into this for weeks, and resetting my CloudKit dashboard only 'cures' it for up to a week, then it pops up again. I'd also be more than happy to post any code if that would help you answer my question. I haven't posted any code initially, as I have no clue what code might cause this.
Any answer would be highly appreciated
Upvotes: 16
Views: 1460
Reputation: 4882
Apple replied to a bug report that I have filed that this issue should be solved with iOS 9. So far that seems to be right as this issue hasn't occured again, but please let me know if this is still bothering someone.
Upvotes: 3
Reputation: 30551
This might happen because the dashboard trace below suggests Apple use the Tombstone technique for replicating deletes across a distributed database. One of the nodes might have a bug or an old software version and is syncing the tombstone false field back across the system, causing the record to undelete itself. Or maybe something your code is doing is accidentally bringing these deleted records back to life? A workaround would be to use your own soft-delete boolean field and see how that behaves.
[{
"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"
}
},
...
As for the record counts, yes mine are inaccurate too.
Upvotes: 3