IOS本机传递JSON参数中的Worklight适配器调用

时间:2015-05-13 07:48:03

标签: ios objective-c ibm-mobilefirst worklight-adapters

在JavaScript中使用JSON.parse(parameter-value)时,适配器调用工作正常,但是当在本机iOS应用程序中执行类似操作时,它会因以下错误而失败。

Javascript适配器调用:

var invocationData = {
    adapter : 'TEST_ADAP',
    procedure : 'PROC1',
    parameters : [JSON.parse(A)],
};

原生呼叫:

json= // some json value will be come
 MyConnect *connectListener = [[MyConnect alloc] initWithController:self];
    [[WLClient sharedInstance] wlConnectWithDelegate:connectListener];
    WLProcedureInvocationData *myInvocationData = [[WLProcedureInvocationData alloc] initWithAdapterName:@"TEST" procedureName:@"test"];

    myInvocationData.parameters = [NSArray arrayWithObjects:json, nil];

    for (NSString *str in myInvocationData.parameters) {
        NSLog(@"values of account test %@",str);

    }
    PasswardPage *invokeListener = [[PasswardPage alloc] initWithController:self];
    [[WLClient sharedInstance] invokeProcedure:myInvocationData withDelegate:invokeListener];

2 个答案:

答案 0 :(得分:1)

你的行

myInvocationData.parameters = [NSArray arrayWithObjects:json, nil];

几乎是正确的。

parameters属性应该是NSArray(就像你做的那样),但数组必须由字符串值组成 - 不是JSON对象。

myInvocationData.parameters = [NSArray arrayWithObjects:@"myValue1", @"myValue2", @"myValue3", nil];

如果您收到的数据不是这种格式,则需要先将其转换为此格式。这超出了这个问题的范围。

如果您不确定如何将现有格式转换为有效NSArray,请打开一个新问题(标记为Objective-C,而非工作灯)。

答案 1 :(得分:0)

我们可以在iOS Native代码中将JSON作为NSString传递给调用适配器 实施例

//Created Dictionary 
NSMutablec *dict = [[NSMutableDictionary alloc]init];
[dict setObject:@"xyz" forKey:@"Name"];
[dict setObject:@"iOS" forKey:@"Platform"];

//Convert it to JSON Data
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict
                                                   options:nil
                                                     error:&error];
//JSON Data To NSString

NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

WLProcedureInvocationData * invocationData = [[WLProcedureInvocationData alloc] initWithAdapterName:@"XYZAdapter" procedureName:@"FunctionXYZ"];

//Passing jsonString (NSString Created out of JSON Data) as array to set Parameters.

[invocationData setParameters:[NSArray arrayWithObject:jsonString]];

[[WLClient sharedInstance] invokeProcedure:invocationData withDelegate:self];