Как вызвать объектный код c из javascript в какао

Прямо сейчас мой javascript выглядит так:

 testStackData.addOrUpdateHeader("username", "vikas test", 1);
 testStackData.addOrUpdateHeader("testHeader", testStackData.priorResults.responseBody.cars[0].name, 1);
 testStackData.addOrUpdateVariable("carNameTest", "variable updated from pre script", 1);
 testStackData.stepError.haveError = false;
 return testStackData

Теперь мне нужно создать функцию Objective-C addOrUpdateHeader или addOrUpdateVariable, как указано в javascript.

Но я запутался, как вызывать эти функции.


person Jas_meet    schedule 02.04.2015    source источник
comment
возможный дубликат Как вызвать метод Objective-C из Javascript в приложении Cocoa/WebKit?   -  person legoscia    schedule 02.04.2015
comment
Для этого они используют веб-просмотр, но мое требование не позволяет мне использовать веб-просмотр. Я искал что-то с помощью Javascriptcore   -  person Jas_meet    schedule 02.04.2015


Ответы (1)


Наконец-то я получил свой код javascript, запускающий мое приложение с помощью базовой структуры Javascript.

Я создал строку json с моими функциями javascript, встроенными в саму строку. Поскольку javascript теряется в своих определениях, он позволяет эффективно вызывать и выполнять функции.

Переходя к коду, я создал отдельную функцию для addOrUpdateHeader addOrUpdateVariable.

Функции читаются следующим образом:

"addOrUpdateHeader" : 



   function(headerName, headerValue, trackHistory){
        if(this.projectServers.projectServerDefaultHeaders.length>0) {
        var index ;
        var isHeaderNameExists = false;
        for(var h =0; h<this.projectServers.projectServerDefaultHeaders.length;h++) {
        if(this.projectServers.projectServerDefaultHeaders[h].headerName === headerName) {
        index=h;
        isHeaderNameExists = true;
        break;
        } }
        if(isHeaderNameExists) {
       this.projectServers.projectServerDefaultHeaders[index].headerValue = headerValue;
        }
        else {
        this.projectServers.projectServerDefaultHeaders.push({
        headerName : headerName,
        headerValue : headerValue,
        projectServerDefaultHeaderId : '',
        trackHistory : trackHistory
        });
        } } },
        "addOrUpdateVariable" : function(variableName, variableValue){
        if(this.projectServers.projectServerDefaultVariables.length>0) {
        var index ;
        var isVariableNameExists = false;
        for(var v =0; v<this.projectServers.projectServerDefaultVariables.length;v++) {
        if(this.projectServers.projectServerDefaultVariables[v].variableName === variableName) {
        index=v;
        isVariableNameExists = true;
        break;
        } }
        if(isVariableNameExists) {
 this.projectServers.projectServerDefaultVariables[index].variableValue = variableValue;
        }
        else {
        this.projectServers.projectServerDefaultVariables.push({
        variableName : variableName,
        variableValue : variableValue,
        projectServerDefaultVariableId : ''
        });
        }}
        }

а затем использовал JContext ядра javascript для выполнения необходимых функций с помощью следующего кода

JSContext *context = [[JSContext alloc] init];
    context.exceptionHandler = ^(JSContext *context, JSValue *exception) {
        NSLog(@"[%@:%@:%@] %@\n%@", exception[@"sourceURL"], exception[@"line"], exception[@"column"], exception, [exception[@"stack"] toObject]);
    };
    [context evaluateScript:testStackData];
    NSString * jsCode = [NSString stringWithFormat:@"var prescript = function (testStackData) {%@}",script];
    [context evaluateScript:jsCode];
    JSValue * ret = [context evaluateScript:@"prescript(testStackData);"];

здесь testStackData - моя строка json

person Jas_meet    schedule 23.04.2015