1

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
4

1 に答える 1

1

私は問題を解決しました。以下のように DataSource プロトコルを実装する必要があります。

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 に答える