[Pythonmac-SIG] PyObjC: debugging error-less crashes?

Ronald Oussoren ronaldoussoren at mac.com
Thu Jul 24 07:52:05 CEST 2008


On 23 Jul, 2008, at 23:26, Gary Bernhardt wrote:

> You need to wrap you alertEnded... method with
> PyObjcTools.Apphelper.endSheetMethod:
>
> @PyObjcTools.Apphelper.endSheetMethod
> def alertEnded(self, alert, choice, context):
>    ...
>
> (Methods wrapped with endSheetMethod don't need the ObjC name
> mangling, so you can name it whatever you want.)
>
> I have a very weak understanding of why this is needed, but it's
> something related to sheet callback methods not having a fixed
> signature.

That's the right fix, and it is needed because the arguments of the  
callback (the alertEnded method above) aren't all instances of  
NSObject. Some of them are basic C types. If you don't tell PyObjC  
about this the bridge won't know that and will happely treat a C  
integer or 'void*' value as an object reference, which will almost  
certainly crash your program.

Decorators like endSheetMethod aren't needed for most other methods  
because either the method signature is simple (all arguments are  
objects, as is the return value), or PyObjC can deduct the correct  
method signature from the super class or protocol definitions.

Ronald



More information about the Pythonmac-SIG mailing list