1

我想用 PyObjC 制作 NSTableView。所以我写了如下代码。这段代码有效,至少我可以看到 TableView。但是当我激活时tableView:objectValueForTableColumn:row:(该方法在下面注释掉)python 因分段错误而崩溃。

我想知道我在哪里犯了错误。谢谢。

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
4

1 回答 1

1

我解决了问题。我需要实现如下数据源协议:

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)

现在一切正常。

于 2013-03-22T11:36:36.743 回答