[Pythonmac-SIG] [Pyobjc-dev] another tableview question
Dethe Elza
delza at livingcode.org
Fri Jul 8 06:10:08 CEST 2005
On 7-Jul-05, at 7:29 PM, Phil Christensen wrote:
> #################################
> # class defined in MainMenu.nib
> class ContentsTreeViewDelegate(NibClassBuilder.AutoBaseClass):
> # the actual base class is NSObject
> # The following outlets are added to the class:
> # controller
> # tableView
>
> def init(self):
> self.contents = []
> return self
>
You should call your superclass init() here. Bob Ippolito wrote
about proper use of super on this list a few days ago, so I'm
paraphrasing from him:
def init(self):
self = super(ontentsTreeViewDelegate, self).init()
self.contents = []
return self
> def awakeFromNib(self):
> self.tableView.documentView().setDataSource_(self)
>
You can (and perhaps should) set the data source in your nib using
InterfaceBuilder.
> def numberOfRowsInTableView_(self, sender):
> return (len(self.contents))
> numberOfRowsInTableView_ = objc.selector(numberOfRowsInTableView_,
> argumentTypes='O',
> returnType='i')
>
I have never needed to use objc.selector. I think this method should
be OK without it.
> def tableView_objectValueForTableColumn_row_(self, sender,
> tableColumn, row):
> if (len(self.contents) > row):
> self.contents[row]
> tableView_objectValueForTableColumn_row_ = objc.selector
> (tableView_objectValueForTableColumn_row_,
>
> argumentTypes='OOi',
>
> returnType='O')
>
I think this may be the problem, you're not returning a value from
this method. Also, the value you return should inherit from
NSObject, and you should keep a reference to it, because the
tableView doesn't, IIRC.
> #################################
>
> but when I run the application I get:
>
> 2005-07-07 22:19:30.911 controller[7740] *** Illegal NSTableView
> data source (<ContentsTreeViewDelegate: 0x11ac760>). Must
> implement numberOfRowsInTableView: and
> tableView:objectValueForTableColumn:row:
>
I think this is due to you not returning a value from the method
above. Try it and see.
>
> Which I thought I had! Incidentally, I've also tried defining the
> selector with and without the 'selector' argument, and I've also
> tried using the 'signature' argument instead of the argumentTypes/
> returnType keywords.
>
You shouldn't need these, the PyObjC does a great job of hiding these
details.
> Any help would be greatly appreciated.
>
> Thanks in advance,
>
> -phil christensen
> phil at bubblehouse.org
>
--Dethe
Windows has detected the mouse has moved. Please restart your system
for changes to take effect.
More information about the Pythonmac-SIG
mailing list