On Aug 16, 2011, at 13:14 , Andrew Kinnie wrote:
> Hmm. Well the generated code was created by Xcode 4's "Create NSManagedObject Subclass" based on the model. The properties are created along with the methods, however due to an earlier issue, I changed @dynamic to @synthesize for the various properties in the .m for Article and MediaResource. There are no ivars. Apparently this caused the problem. Changing it back to @dynamic fixed it.
> Further debugging indicated that when I deleted an article, using
> [self.moc deleteObject:myArticle];
> and at the point that is called, the article had a media object in it's media relationship (doing po myArticle in the debugger indicates this) but when I click continue, it lands on a breakpoint in the removeMediaObject method in Article, and the value passed in exists, but the media relationship itself contains no objects. That is where the crash occurred. So apparently, Core Data was doing the cascade delete, then because I had "@synthesize" instead of "@dynamic" it called the class's removeMediaObject method trying to remove the object that is no longer in the relationship, thus it breaks by calling removeObject" on the __NSSet0 singleton object.
If you change a Core Data model property from @dynamic to @synthesize, then it isn't using Core Data any more -- it's using ivars for the property backing store instead. That means you end up with 2 properties with the same name -- the model-derived property that Core Data knows about, and the subclass-derived property that the rest of your app knows about. No wonder that crashes start to occur.
You *cannot* swap @synthesize and @dynamic for a Core Data property, not ever. You can replace the Core Data implementation (the @dynamic one, so to speak) with your own implementation. Just not the @synthesize'd one. Not ever.
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden