If I have an NSManagedObject which maintains as one of its properties a set of another type of NSManagedObject, and I set that set to nil or replace it with a different set, what happens to the managed objects in the original set? Will they be orphaned in the database? I know if you delete the parent managed object you can cascade deletes but this isn't the same thing.
I suppose it doesn't matter if it's a set or not. If one managed object references another and now you want it to reference something different and no longer care about the old object, do you have to delete it.
I did some of my own testing:
NSSet *set = [managedObject getDefaultSet]; //at this point I can access the set
[managedObject setDefaultSet:newSet]; //at this point I can't access it anymore!
It seems that CoreData did some magic as after I replace the set with a new set, I can no longer access the old set using gdb. BUT does that mean that it's no longer in the database? I can't access it but do I also need to physically remove it from the DB?
EDIT: New test:
NSSet *set = [managedObject getDefaultSet]; //at this point I can access the set
id object = [set anyObject];
[managedObject setDefaultSet:newSet]; //at this point I can't access it anymore! BUT I can still access the object
I've verified that the object is still in existence so now I guess I do need to delete it. My guess would be to override the setDefaultSet property. What does a default mutator property look like for core data? I don't think I want to override setValue:forKey especially since the class reference tells me explicitly not to.