2

次の内容の JavaScript ファイル があるjavascript.jsとします。

window.fruitsAndVeggies = {
    name2CategoryMap: {
        "apple": "fruit",
        "carrot": "vegetable"
    }
}

window.fruitsAndVeggiesJavascript オブジェクトの内容をNSDictionaryに入れる最も簡単な方法を誰か教えてもらえますか?

インターネット上のさまざまなソースから、Javascript コンテキストを作成し、そのコンテキストで JavaScript コードを評価する次のスニペットをつなぎ合わせました。

JSGlobalContextRef ctx = JSGlobalContextCreate(NULL);  // create context


JSValueRef exception = JSValueMakeUndefined(ctx); // create object to hold exceptions

// Make a "window" object in the JS Context
JSStringRef makeWindowScript = JSStringCreateWithUTF8CString("var window = {}");
JSValueRef result = JSEvaluateScript( ctx, makeWindowScript, NULL, NULL, 0, &exception );


// load the javascript file into an NSString
NSBundle *          bundle = [NSBundle bundleWithIdentifier:@"my.bundle"];
NSString *filePath = [bundle pathForResource:@"javascript" ofType:@"js"];

NSError *error;
NSString *stringFromFile = [[NSString alloc]
                                 initWithContentsOfFile:filePath
                                 encoding:NSUTF8StringEncoding
                                 error:&error];

// convert NSString to a JSStringRef
CFStringRef cfString = (__bridge CFStringRef)stringFromFile;
JSStringRef jsString = JSStringCreateWithCFString(cfString);


// evaluate the javascript
JSEvaluateScript( ctx, jsString, NULL, NULL, 0, &exception );

次に何をしようか迷っています。fruitsAndVeggies.name2CategoryMapObjective-C コードでの内容を使用する必要があります。それらにアクセスする最も簡単な方法は何ですか? それらをobjective-c辞書にロードするために呼び出すことができる簡単な関数はありますか?

助けてくれて本当にありがとうございます。

4

2 に答える 2

0

JavaScriptCore の新しい Objective-C インターフェイスが iOS 7 で導入されて以来、物事はよりシンプルになりました。これの概要については、Apple の開発者ネットワーク ( https://developer. apple.com/videos/wwdc/2013/?id=615

JavaScript リソース ファイルを評価した後に必要なコードは次のとおりです。

    JSContext *context = [JSContext contextWithJSGlobalContextRef:ctx];
    NSDictionary *fruitsAndVeggiesDict = [context[@"window"][@"fruitsAndVeggies"][@"name2CategoryMap"] toObject];

    NSLog(@"name2CategoryMap['apple'] = %@", fruitsAndVeggiesDict[@"apple"]);
    NSLog(@"name2CategoryMap['carrot'] = %@", fruitsAndVeggiesDict[@"carrot"]);
于 2014-02-09T00:15:00.687 に答える