• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: NSTreeController woes... NSZombie at doc closed
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: NSTreeController woes... NSZombie at doc closed


  • Subject: Re: NSTreeController woes... NSZombie at doc closed
  • From: Ken Victor <email@hidden>
  • Date: Mon, 12 Jun 2006 15:25:02 -0700

after many hours of debugging, i still haven't found and fixed the root cause for this... but i have gotten some more "interesting information"

i overrode add/remove observer:forKeyPath: methods in my entity subclass so i could see what was happening. i've discovered that when the outline view is instantiated from the nib file, each entity at the top level (ie, those entities without a parent) are called to add an _NSArrayControllerTreeNode as an observer. when a row is expanded, the newly exposed entities are similarly called.

when i close the window, if no rows are expanded, [NSTreeController dealloc] sends a removeObserver to remove the _NSArrayControllerTreeNode for each top level entity. however, if some rows are expanded at the time [NSTreeController dealloc] is invoked, removeObserver is only sent to the unexpanded top level entities!

this explains the "zombie call" to the tree controller. but i'm still at a loss as to what is causing this. i haven't yet been able to replicate this aberrant behavior is a simplified test app, so i sorta believe its a bug in my code someplace.

any help/suggestions/advice as to how to get further information greatly appreciated! please!!! :-)

thanx,
ken


At 7:20 PM -0700 6/11/06, Ken Victor wrote:
one of the windows of my core data document app contains an NSOutlineView bound with a NSTreeController. the basics work fine. however, if i expand a row and then close the document, i get the following stack trace:

#0 0x929ffbf8 in -[_NSZombie methodSignatureForSelector:]
#1 0x92925f04 in -[NSObject(NSForwardInvocation) forward::]
#2 0x90a430b0 in _objc_msgForward
#3 0x93c00afc in -[_NSArrayControllerTreeNode observeValueForKeyPath:ofObject:change:context:]
#4 0x92940acc in -[NSObject(NSKeyValueObserverNotification) didChangeValueForKey:]
#5 0x940b0760 in -[NSManagedObject didChangeValueForKey:]
#6 0x9409f26c in -[NSFaultHandler turnObject:intoFaultWithContext:]
#7 0x9409ef78 in -[NSManagedObjectContext(_NSInternalAdditions) _disposeObjects:count:notifyParent:]
#8 0x9409eaf4 in -[NSManagedObjectContext(_NSInternalAdditions) _dispose:]
#9 0x9409e7e4 in -[NSManagedObjectContext dealloc]
#10 0x93c08458 in -[NSPersistentDocument setManagedObjectContext:]
#11 0x93c07fd0 in -[NSPersistentDocument dealloc]
#12 0x000ca5ec in -[KVDocument dealloc] at KVDocument.mm:253
#13 0x00003dc0 in -[KVSubDocDoc dealloc] at KVSubDoc Doc.mm:87
#14 0x93b98824 in -[_NSBindingInfo dealloc]
#15 0x907bf08c in __CFArrayReleaseValues
#16 0x907bedf8 in __CFArrayDeallocate
#17 0x907bbf34 in _CFRelease
#18 0x9390093c in -[NSBinder _dealloc]
#19 0x93b9f5d4 in -[NSObjectParameterBinder _dealloc]
#20 0x9390083c in -[NSBinder dealloc]
#21 0x9290e968 in NSPopAutoreleasePool
#22 0x936d70d4 in -[NSApplication run]
#23 0x937c7bfc in NSApplicationMain
#24 0x00003ac4 in main at main.m:12


and the following on the console log:

2006-06-11 18:50:03.677 Accounts[12130] *** Selector 'leafKeyPath' sent to dealloced instance 0x1301670 of class NSTreeController.
Break at '-[_NSZombie methodSignatureForSelector:]' to debug.
2006-06-11 18:50:04.809 Accounts[12130] *** -[NSAutoreleasePool dealloc]: Exception ignored while releasing an object in an autorelease pool: *** Selector 'leafKeyPath' sent to dealloced instance 0x1301670 of class NSTreeController.
Break at '-[_NSZombie methodSignatureForSelector:]' to debug.


note that everything close fine if i don't expand any rows while this window is open.

also, by adding the following line of code to my NSWindowController's subclass dealloc method, the problems also go away:

[[(KVWindow*)[self window] arrayController] setManagedObjectContext: nil];
(arrayController in my KVWindow class returns the NSTreeController for the outline view)


this makes no sense to me!!! can anyone explain this or point me to some documentation that might explain it.

thanx,
ken

ps. note that i set a breakpoint at -[NSManagedObject didChangeValueForKey:] and in the debugger the NSManagedObject was all zero for the above stack trace.
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Cocoa-dev mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden


  • Follow-Ups:
    • [solved] Re: NSTreeController woes... NSZombie at doc closed
      • From: Ken Victor <email@hidden>
References: 
 >NSTreeController woes... NSZombie at doc closed (From: Ken Victor <email@hidden>)

  • Prev by Date: Re: Icon button with pop-up menu in toolbar?
  • Next by Date: Re: Cocoa newb - Bus Error from TCP Server
  • Previous by thread: Re: NSTreeController woes... NSZombie at doc closed
  • Next by thread: [solved] Re: NSTreeController woes... NSZombie at doc closed
  • Index(es):
    • Date
    • Thread