我发现在JS和Obj-C之间传递对象的唯一方法是使用JSON.stringify()编码JS对象并将json字符串传递给PhoneGap.exec
PhoneGap.exec('Alarm.update',JSON.stringify(list));
...并在Obj-C中重建对象:
NSString *jsonStr = [arguments objectAtIndex:0];
jsonStr = [jsonStr stringByReplacingOccurrencesOfString:@"\\\"" withString:@"\""];
jsonStr = [NSString stringWithFormat:@"[%@]",jsonStr];
NSObject *arg = [jsonStr JSONValue];
这是正确的吗?这样做有更好/更合适/官方的方式吗?
答案 0 :(得分:9)
PhoneGap.exec专为简单类型而设计。你的方式还可以,你可以只传递你的单个对象(仅适用于单个对象,请参阅我们如何编组命令的页脚),它应该在命令的选项字典中。然后在Objective-C方面,使用键值编码自动使用字典填充自定义对象。
e.g。 MyCustomObject * blah = [MyCustomObject new]; [blah setValuesForKeysWithDictionary:options];
如果您对PhoneGap.exec的工作方式感兴趣,请继续阅读...
* --------- *
对于PhoneGap.exec,javascript参数被封送到一个URL中。
对于JS命令: PhoneGap.exec('MyPlugin.command','foo','bar','baz',{mykey1:'myvalue1',mykey2:'myvalue2'});
生成的命令url是: 间隙://MyPlugin.myCommand/foo/bar/baz/ mykey1 = myvalue1&安培; mykey2 = myvalue2
这将在Objective-C方面进行处理和转换。 foo,bar,baz放在arguments数组中,查询参数放在options字典中。它将查找一个名为“MyPlugin”的类,并使用参数array和options dictionary作为参数调用选择器“myCommand”。
有关详细信息,请参阅phonegap.js,查看PhoneGap.run_command
答案 1 :(得分:3)
我认为这是最好的方法,如果不是唯一的方法。
PhoneGap.exec调用只需要一个NSDictionary的对象,所以我没有看到更好的方法来处理它。
大多数方法的结构类似于
- (void)someMethod:(NSArray*)arguments withDict:(NSDictionary*)options {
}