Gideon, It looks like you have an NSManagedObject that is observing itself. If this is in fact the case what is the objective? There may be a better way to accomplish your goal if you let us know what it is.
Mike Swan ETCP Certified Entertainment Electrician http://www.michaelsswan.com "As human beings our greatness lies not so much in being able to remake the world... as being able to remake ourselves" - Gandhi On Aug 9, 2010, at 6:59 AM, cocoa-dev-requ...@lists.apple.com wrote: > Message: 15 > Date: Mon, 9 Aug 2010 20:51:44 +1000 > From: Gideon King <gid...@novamind.com> > Subject: KVO and Core data > To: cocoa-dev List <cocoa-dev@lists.apple.com> > Message-ID: <55ff7ff0-18be-4e88-93b5-28d1da2bf...@novamind.com> > Content-Type: text/plain; charset=us-ascii > > Hi all, > > I have a KVO registration like this: > > [self addObserver:self forKeyPath:@"toOne.attribute" options:0 context:NULL]; > > I establish this on -awakeFromInsert or -awakeFromFetch, and have the > corresponding removeObserver called on -willTurnIntoFault. > > The problem is that when I do a Save As on my document, it migrates the > persistent store, which appears to cause the object at the destination of the > toOne relationship to be turned into a fault before the object that > registered as an observer is. Now when I check the observationInfo for the > object that is being faulted (at the end of the toOne relationship), it has > itself registered as an observer for "attribute". > > I guess this means that behind the scenes, the KVO establishes observation > information automatically at every level of a key path (something I hadn't > realized before, but which appears to make sense). > > Then something behind the scenes tries to access the attribute on an object > that has been turned into a fault, and invalidated, and everything comes > crashing down. > > So I have two questions: > > 1. Is it the "right way" for me to be adding observation on the awake methods > and removing it on willTurnToFault? > > 2. If this is OK, then what could be affecting the system such that it > doesn't remove the observation information in the destination of the to-one > relationship? I'm wondering if there could be something in my data model that > could be affecting it. This relationship is modeled as a one to one, with a > delete rule of cascade from the parent to the child, and the inverse > relationship is also modeled, with a deny rule. There's also another optional > relationship from the child to the parent with a deny rule, modeled in one > direction only (and not used in the data I am testing with anyway). > > > A sample trace: > > The NSManagedObject with ID:0x1240033c0 > <x-coredata://53D12C5C-31DB-4287-89B2-E03CF59EB066/TopicMapView/pDC99795E-2B94-4721-BCFF-AB3945EC74D2> > has been invalidated. > 0 CoreFoundation 0x00007fff88f0fcc4 > __exceptionPreprocess + 180 > 1 libobjc.A.dylib 0x00007fff823880f3 > objc_exception_throw + 45 > 2 CoreData 0x00007fff8836911a > -[_NSInvalidationFaultHandler fulfillFault:withContext:] + 106 > 3 CoreData 0x00007fff8830bdbe > _PF_FulfillDeferredFault + 254 > 4 CoreData 0x00007fff8830fab7 > _sharedIMPL_pvfk_core + 87 > 5 CoreData 0x00007fff8830fc28 > -[NSManagedObject(_PFDynamicAccessorsAndPropertySupport) > _genericValueForKey:withIndex:flags:] + 40 > 6 CoreData 0x00007fff883154be -[NSManagedObject > valueForKey:] + 270 > 7 Foundation 0x00007fff868594e5 > -[NSKeyValueNestedProperty object:didRemoveObservance:recurse:] + 86 > 8 Foundation 0x00007fff86858d3b > -[NSObject(NSKeyValueObserverRegistration) _removeObserver:forProperty:] + 190 > 9 Foundation 0x00007fff86858c1f > -[NSObject(NSKeyValueObserverRegistration) removeObserver:forKeyPath:] + 135 > 10 Foundation 0x00007fff86859502 > -[NSKeyValueNestedProperty object:didRemoveObservance:recurse:] + 115 > 11 Foundation 0x00007fff86858d3b > -[NSObject(NSKeyValueObserverRegistration) _removeObserver:forProperty:] + 190 > 12 Foundation 0x00007fff86858c1f > -[NSObject(NSKeyValueObserverRegistration) removeObserver:forKeyPath:] + 135 > 13 NMFoundation 0x00000001002bbe6f -[NMTopicNodeMO > stopObserving] + 279 > 14 NMFoundation 0x00000001002b1f23 -[NMManagedObject > willTurnIntoFault] + 235 > 15 NMFoundation 0x00000001002bc070 -[NMTopicNodeMO > willTurnIntoFault] + 347 > 16 CoreData 0x00007fff88316be0 -[NSFaultHandler > turnObject:intoFaultWithContext:] + 96 > 17 CoreData 0x00007fff88316572 > -[NSManagedObjectContext reset] + 578 > 18 CoreData 0x00007fff8836e0d3 > -[NSPersistentStoreCoordinator(_NSInternalMethods) > _retainedAllMigratedObjectsInStore:toStore:] + 1379 > 19 CoreData 0x00007fff8836bb54 > -[NSPersistentStoreCoordinator > migratePersistentStore:toURL:options:withType:error:] + 676 > 20 AppKit 0x00007fff837fdd5c > -[NSPersistentDocument > writeToURL:ofType:forSaveOperation:originalContentsURL:error:] + 432 > > > > TIA > > Gideon _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) 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: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com