PhoneGap.exec()在JS和Obj-C之间传递对象

Ces*_*sar 4 iphone json object parameter-passing cordova

我发现在JS和Obj-C之间传递对象的唯一方法是通过使用JSON.stringify()编码JS对象并将json字符串传递给PhoneGap.exec

PhoneGap.exec('Alarm.update',JSON.stringify(list));
Run Code Online (Sandbox Code Playgroud)

...并在Obj-C中重建对象:

NSString *jsonStr = [arguments objectAtIndex:0];
jsonStr = [jsonStr stringByReplacingOccurrencesOfString:@"\\\"" withString:@"\""];
jsonStr = [NSString stringWithFormat:@"[%@]",jsonStr];
NSObject *arg = [jsonStr JSONValue];
Run Code Online (Sandbox Code Playgroud)

这是正确的吗?这样做有更好/适当/官方的方式吗?

Sha*_*ron 9

PhoneGap.exec是为简单类型设计的.你的方式是好的,交替你可以通过你的单一对象(只针对单个对象只有工作,看看我们如何当元帅的命令页脚),它应该是在选择字典的命令.然后在Objective-C的一侧,使用键 - 值编码与词典中自动填充您的自定义对象.

例如MyCustomObject*blah = [MyCustomObject new]; [blah setValuesForKeysWithDictionary:options];

如果您对PhoneGap.exec的工作原理感兴趣,请继续阅读......

*---------*

对于PhoneGap.exec,javascript参数被封送到URL中.

对于JS命令:PhoneGap.exec( 'MyPlugin.command', '富', '酒吧', '巴兹',{mykey1: 'myvalue1',mykey2: 'myvalue2'});

生成的命令url是:gap://MyPlugin.myCommand/foo/bar/baz/?mykey1 = myvalue1&mykey2 = myvalue2

这将在Objective-C方面进行处理和转换.foo,bar,baz放在arguments数组中,查询参数放在options字典中.它将查找一个名为"MyPlugin"的类,并将使用arguments数组和选项字典作为参数调用选择器"myCommand".

有关详细信息,请参阅phonegap.js,查看PhoneGap.run_command