Как получить NSTableView для загрузки с Javascript для автоматизации
Я думаю, я живу на грани, пытаясь на OS X Yosemite получить NSTableView для заполнения с использованием JavaScript через ScriptEditor. Я могу заставить таблицу отображаться, и количество строк устанавливается правильно, однако фактические данные не загружаются в таблицу.
Я вижу это в консоли: 24.07.14 7: 47: 27.784 AM Script Editor [11708]: * Неверный источник данных NSTableView (). Необходимо реализовать 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);
}
1 ответ
Похоже, у меня было неправильное имя метода для строки objectValueForTableColumn:
ObjC.registerSubclass({
name: "MyDataSource",
protocols: ["NSTableViewDataSource"],
methods: {
"numberOfRowsInTableView:": {
types: ["long", ["id"]],
implementation: function(id) {
console.log("numberOfRowsInTableView called", id);
return 3;
}
},
"tableView:objectValueForTableColumn:row:": {
types: ["id", ["id", "id", "long"]],
implementation: function(table, column, row) {
console.log("objectValueForTableColumn called", table, column);
return "Scott"
}
}
}
});