JonEasy
JonEasy

Reputation: 1013

How to write changes from one ManagedObject to similar ManagedObjects

I am new with Core Data and have a problem which sounds trivial to solve (at least thinking in SQL) but I can't get my head around that with Core Data.

What I'm trying to do is the following: I have a fetched ManagedObject, do some changes and save it again. This ManagedObject has an attribute id. I want to write the changes I made to this ManagedObject to all the ManagedObjects with the same id.

I was thinking to overwrite willSave: and fetching the other ManagedObjects with the same id there but this won't work because I would encounter an infinite loop there.

Can somebody give me a hint on how to progress from here? Thanks in advance

Upvotes: 0

Views: 63

Answers (2)

A.S.
A.S.

Reputation: 736

I would, indeed, try to find some better way to deal with it, because actually you should't think of Core Data as of SQL with its triggers.

But actually you can indeed use willSave method and avoid infinite loop. See NSManagedObject Class Reference willSave method

If you change property values using primitive accessors, you avoid the possibility of infinite recursion, but Core Data will not notice the change you make.

So basically in your willSave method you'll need to call some fetchRequest to get all instances of the same Entity, then loop through them and update using primitive accessor: setPrimitiveValue:forKey:

Also I would advice to verify objects in loop whether they are removed (-isDeleted) and, probably, whether that object is not your current one (by comparing managedObjectIDs)

Upvotes: 1

Wain
Wain

Reputation: 119031

You could make willSave work, but it isn't going to be a nice bit of code to ignore all of the invalid triggers.

It's better to have a class which manages this functionality, pass in the new data value and the attribute id and allow it to do the fetch and update all of the fetched objects (and trigger the save).

Upvotes: 1

Related Questions