2010-10-22 61 views
4

我發現經過JS和對象 - 它是通過編碼由透過JSON.stringify(JS的對象之間的對象的唯一方法之間的物體),並通過JSON字符串來PhoneGap.execPhoneGap.exec()通過JS和對象 -

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

讓您的條款變得直白。 X-Code是一個IDE,Objective-C是一種語言。 – mikerobi 2010-10-22 02:15:40

+3

:g/xCode/s // Obj-c/g完成 – Cesar 2010-10-22 03:59:42

回答

3

我覺得這是做的最好的辦法,如果不是唯一的方式。

的PhoneGap.exec電話只是需要對象的NSDictionary在幕後,所以我沒有看到一個更好的方式來處理它。

大多數方法的構成就像

- (void)someMethod:(NSArray*)arguments withDict:(NSDictionary*)options { 
} 
9

PhoneGap.exec是專爲簡單類型。你的方式沒問題,或者你可以傳入你的單個對象(只對單個對象起作用,關於我們如何封送命令的信息請參見頁腳),它應該在命令的選項字典中。然後在Objective-C一側,使用鍵值編碼來自動填充字典中的自定義對象。

例如 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'});

所得命令網址爲: 間隙://MyPlugin.myCommand/foo/bar/baz/ mykey1 = myvalue1 & mykey2 = myvalue2

這將被處理並轉換在Objective-C的一側上。將foo,bar,baz放入參數數組中,並將查詢參數放入選項字典中。它將查找名爲「MyPlugin」的類,並將參數array和options dictionary作爲參數調用選擇器「myCommand」。

欲瞭解更多信息,請參閱phonegap.js,查看PhoneGap.run_command