Как получить 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);
}

person Scott Walter    schedule 24.07.2014    source источник


Ответы (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"
            }
        }                       
    }
}); 
person Scott Walter    schedule 24.07.2014