我想我生活在边缘,尝试在 OS X Yosemite 上通过 ScriptEditor 使用 JavaScript 来填充 NSTableView。我可以显示表格并正确设置行数,但实际数据并未加载到表格中。
我确实在控制台中看到了这一点:7/24/14 7:47:27.784 AM Script Editor[11708]: * Illegal NSTableView data source ()。必须实现 numberOfRowsInTableView: 和 tableView:objectValueForTableColumn:row:
但是我认为我已经实施了正确的方法。也许我遗漏了一些简单的东西,或者 Javascript-Cocoa 绑定中可能存在错误。我看到了 numberOfRowsInTableView 的日志语句,但从来没有看到 objectValueForTableColumn 的日志语句。
有任何想法吗?
function makeTable() {
tableContainer = $.NSScrollView.alloc.initWithFrame($.NSMakeRect(10, 150, 380, 200));
tableView = $.NSTableView.alloc.initWithFrame($.NSMakeRect(0, 0, 364, 200));
column1 = $.NSTableColumn.alloc.initWithIdentifier("Col1");
column1.setWidth(252);
column1.headerCell.setStringValue("First Name");
column2 = $.NSTableColumn.alloc.initWithIdentifier("Col2");
column2.setWidth(198);
column2.headerCell.setStringValue("Last Name");
tableView.addTableColumn(column1);
tableView.addTableColumn(column2);
if($.MyDataSource==undefined) {
ObjC.registerSubclass({
name: "MyDataSource",
protocols: ["NSTableViewDataSource"],
methods: {
"numberOfRowsInTableView:": {
types: ["NSInteger"],
implementation: function() {
console.log("numberOfRowsInTableView called");
return 3;
}
},
"objectValueForTableColumn": {
types: ["id", ["NSTableColumn", "NSInteger"]],
implementation: function(col, row) {
console.log("objectValueForTableColumn called")
return "Scott"
}
}
}
});
}
tableDataSource = $.MyDataSource.alloc.init;
tableView.setDataSource(tableDataSource);
tableContainer.setDocumentView(tableView);
window.contentView.addSubview(tableContainer);
}