On Mar 8, 2005, at 16:59, Florian Munz wrote:
Bob Ippolito <[EMAIL PROTECTED]> wrote:
What you need to do here is:
(a) implement a __del__ that removes it as an observer or otherwise
ensure that the Controller object is never an observer after it's dead
(i.e. by making sure it never dies, or removing it manually before it
goes away).
(b) make sure it's alive for the duration that you want it to receive
notifications, by storing away a reference to it somewhere.. if you are
just testing and you want it to never go away, do self.retain()
Thanks a lot, that solved all my problems and I know a significant bit more about PyObjC now ;-)
FYI the best way to debug a crash that happens on objc_msgSend is to use the same technique you would use when debugging Objective-C code: NSZombie.
Some information is available: http://developer.apple.com/technotes/tn2004/tn2124.html http://www.cocoadev.com/index.pl?DebuggingAutorelease
Essentially, what I do is this (with an --alias build):
env NSZombieEnabled=YES USE_PDB=1 ./dist/MyApp.app/Contents/MacOS/MyApp
If it's really bad, I'll use GDB:
env NSZombieEnabled=YES USE_PDB=1 gdb --args ./dist/MyApp.app/Contents/MacOS/MyApp
USE_PDB is an environment variable that PyObjCTools.AppHelper.runEventLoop() inspects. When it's set, it will:
(1) enable PyObjCTools.Debugging in verbose mode, so you get a stack trace at every exception that Objective-C sees (caught or otherwise). Python exceptions that cross the bridge will have additional information.
(2) on uncaught exceptions, it'll drop you to pdb (though the runloop will catch many exceptions)
Unfortunately, by the time runEventLoop kicks in it is too late to twiddle NSZombieEnabled and other Foundation debugging hooks, so you have to set it explicitly.
-bob
_______________________________________________ Pythonmac-SIG maillist - Pythonmac-SIG@python.org http://mail.python.org/mailman/listinfo/pythonmac-sig