I've run into a problem.
Over the weekend I've been working on a project where I'm pulling a large xml from a webservice.
It basically has 3 tiers - Clients, Managers, Staff all hierarchical. So the first time the app runs, it pulls this xml and parses it and creates all the entries in the 3 releated Entities - Clients, Managers and Staff.
Every time the app launches I need to pull that same XML down, but this time, I only need to 'update' any of the existing records that have changed, or add new ones for new clients, managers or staff that have appeared since last time.
So - at the moment, as I said, it's pulling it all, parsing it correctly and creating the correct entities and filling in all the attributes.
However, with no data change, on the 2nd launch it's DUPLICATING all of the data - so instead of 15 clients ( the correct number ) I have 30 and so on...
Do I really have to add lots of code in my parsing to check that instead of creating a new NSManagedObject, I check if it's already there?
And if it is - I have to then manually check every attribute?
That's awfully painful and longwinded - isn't there a way to make Core Data do this kinda stuff for me - automatically?
Thanks for any help or suggestions.
I fear you have to keep your DB clean by yourself … The easiest way would be using
NSFetchRequest
: When importing your updated data you can run a query against the existing data and decide what you want to do.As Marcus S. Zarra mentioned in another thread about this topic:
Another source for good information are Apples Programming Guides: Core Data Programming Guide
As Stated in Apple Docs https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdImporting.html
You need to loop the data model and handle it from there like this
Example:
Personally I do not like this method and I wrote this snippet of code that handles this in a pro-efficient manor and which is straight forward! I noticed with Apples method I ran into issues with strings having different characters such as capitol letters and spaces. Below code is tested and working if you rename all your corresponding objects correctly I honestly believe this is the most efficient way to accomplish not adding duplicates in core data.