我想用PyObjC制作NSTableView。
所以我编写了如下代码。
这段代码起作用,至少,我可以看到TableView。
但是当我激活tableView:objectValueForTableColumn:row:
时(方法在下面被注释掉),python会因为segmantation故障而崩溃。
我想知道我犯了什么错误。感谢。
class WindowController(object):
def numberOfRowsInTableView_(self, table):
return 2000
#def tableView_objectValueForTableColumn_row_(self, table, column, row):
# return 'hi'
def initMainWindow(self):
windowRect = NSMakeRect(0.0, 0.0, 300.0, 500.0)
self.window = NSWindow.alloc().initWithContentRect_styleMask_backing_defer_(
windowRect,
NSTitledWindowMask
| NSClosableWindowMask
| NSResizableWindowMask
| NSMiniaturizableWindowMask
| NSTexturedBackgroundWindowMask,
NSBackingStoreBuffered,
False)
self.window.setDelegate_(self.delegate)
self.view = self.initView()
self.window.contentView().addSubview_(self.view)
self.window.display()
self.window.orderFrontRegardless()
def initView(self):
tableContainer = NSScrollView.alloc().initWithFrame_(NSMakeRect(0,0,300, 500))
tableView = NSTableView.alloc().initWithFrame_(NSMakeRect(0,0,300,500))
column1 = NSTableColumn.alloc().initWithIdentifier_("Col1")
tableView.addTableColumn_(column1)
tableView.setDelegate_(self)
tableView.setDataSource_(self)
tableView.reloadData()
tableContainer.setDocumentView_(tableView)
tableContainer.setHasVerticalScroller_(True)
return tableContainer
答案 0 :(得分:1)
我把问题解决了。 我需要实现如下的DataSource Protocol:
class MyDataSource(NSObject, objc.protocolNamed('NSTableViewDataDource')):
def numberOfRowsInTableView_(self, table):
return 1000
def tableView_objectValueForTableColumn_row_(self, table, column, row):
return 'xyzzy'
然后,在TableViewController类中,设置如下的DataSource:
ds = MyDataSource.alloc().init()
myTableView.setDataSource_(ds)
现在一切正常。