JavaScriptからObjective-CへJSONで渡す

複雑な構造のはJSON使って渡せばよかったんじゃないかorz
WebViewのJavaScriptObjective-Cでのやり取りでもそりゃJSON使えるか。
JSON使うのはWebのAPI叩くときみたいな固定観念が。頭固い。


OS X 10.7から標準でNSJSONSerializationが使える。iOSは5から。

function testMethod() {
  window.objC.callFromJSObjCMethod_(JSON.stringify( [{ "a" : 1 },{ "b" : 2 }] ));
}
- (void)callFromJSObjCMethod:(NSString *)jsonString
{
  NSDictionary *dict=nil;
  NSError *error=nil;
  NSArray *array =
  [NSJSONSerialization JSONObjectWithData:
   [jsonString dataUsingEncoding:NSUTF8StringEncoding]
                                  options:NSJSONReadingAllowFragments error:&error];
  for (dict in array) {
    NSLog(@"jsObject: %@",dict); 
  }
 }

JSのObjectをNSDictionaryにしてくれるのが便利。
複雑な構造の値をJavaScriptからObjective-Cに渡す場合に使うとよさげ。
簡単な構造のものなら、JSON使わず直接Convert、と、使い分ける感じか*1

*1:WebKit Objective-C Programming GuideのUsing JavaScript From Objective-C