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

Daniel Ashbrook anjiro at cc.gatech.edu
Thu Jul 24 01:18:24 CEST 2008


Ahh, that did it. Awesome, thanks. These occasional "add a decorator to 
avoid random crash" problems are very confusing... guess I'll figure it 
all out as I go along.


dan


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.
> 
> On Wed, Jul 23, 2008 at 11:57 AM, Daniel Ashbrook <anjiro at cc.gatech.edu> wrote:
>> I'm working my way through the excellent book "Cocoa Programming for Mac OS
>> X", but using PyObjC instead of ObjC. For the most part it's working very
>> well - a testament to the awesomeness of PyObjC!
>>
>> However, I'm occasionally getting a crash from my application that gives no
>> errors - it just enters into the debugger with no other output. A backtrace
>> leads through C code to (inevitably) objc_msgSend(), which doesn't help
>> much.
>>
>> In one case I managed to figure out that I needed to add myFunc_ =
>> objc.accessor(myFunc_) after the definition of myFunc_() (though I have no
>> clue why), but in the current case that doesn't help. The relevant chunk of
>> code is below. My debug log shows the "Ending alert sheet" message, but not
>> the "Alert ended" message.
>>
>>
>> @IBAction
>> def removeEmployee_(self, sender):
>>    selectedPeople = self._employeeController.selectedObjects()
>>    alert =
>> NSAlert.alertWithMessageText_defaultButton_alternateButton_otherButton_informativeTextWithFormat_(u'Delete?',
>> u'Delete', u'Cancel', None, u'Do you really want to delete %d people?' %
>> len(selectedPeople))
>>    NSLog(u'Starting alert sheet')
>> alert.beginSheetModalForWindow_modalDelegate_didEndSelector_contextInfo_(self._tableView.window(),
>> self, 'alertEnded:code:context:', None)
>>    NSLog(u'Ending alert sheet')
>>
>>
>> def alertEnded_code_context_(self, alert, choice, context):
>>    NSLog(u'Alert ended')
>>    if choice == NSAlertDefaultReturn:
>>        self._employeeController.remove(None)
>>
>>
>> Thanks in advance for any hints, whether general or specific!
>>
>>
>>
>> Daniel Ashbrook
>> _______________________________________________
>> Pythonmac-SIG maillist  -  Pythonmac-SIG at python.org
>> http://mail.python.org/mailman/listinfo/pythonmac-sig
>>
> 
> 
> 



More information about the Pythonmac-SIG mailing list