WebView
インスタンスのJavaScriptとWebViewDelegate
の間で通信する場合、JavaScriptタイプとObjective-Cタイプは前後に変換されます。たとえば、JavaScriptからObjective-C関数を呼び出すと、文字列はNSString
、数字はNSNumber
、オブジェクトはWebScriptObject
になります。WebScriptObjectのプロパティを安全に読み取る方法は?
他はかなり扱いが簡単ですが、WebScriptObject
は奇妙なようです。
{"foo": 1, "bar": 2}
のような辞書を渡すとき、私は、このような[[arg valueForKey:@"foo"] intValue] == 1
のようvalueForKey
を使用して抽出物の特性、しかし、あなたは、プロパティが存在するかどうかわからない場合について、参照コードのほとんど?キーがオプションの場合はどうなりますか? [arg valueForKey:@"baz"]
は例外をスローします。私にできること
ことの一つは、
@try {
foo = [[arg valueForKey:@"baz"] intValue];
}
@catch (NSException* e) {
foo = 0;
}
のようなものですが、私はObjective-Cの中の例外が安全ではないし、フロー制御のために使用すべきではないと聞きました。
私は考えることができる唯一の他の方法は、ここで使用される方法のいくつかのバリエーションである。言い換えればhttp://edotprintstacktrace.blogspot.com/2011/10/sample-webscriptobject-javascript.html
:あなたのWebScriptObject
に機能しObject.keys
2.コールを実装するJavaScript関数を定義するには1.使用evaluateWebScript
3.返されたキーの配列を反復処理し、一致するものが見つかるとvalueForKey
を呼び出します。
これは私にとって非常に非効率的です。もっと良い方法があるはずです...そこにはありますか?
:Appleは定期的にObjCオブジェクトにJavaScriptオブジェクトを橋渡しするために使用することができ
JSValue
ウィッヒという名前のクラスを導入しましたか?オプションは何ですか? –これは –
のサブクラスです。申し訳ありませんが、それは確かに不明でした...この場合、 'options'は私が物を抽出したい' WebScriptObject'です。 'properties'は辞書にチェックインするキーを事前に知っていれば、興味のあるフィールドの配列です。 キーがあらかじめわからない任意のオブジェクトを読み取る場合は、 'JSObjectCopyPropertyNames'を使用して' JSObject'からキーのリストを取得し、 'JSPropertyNameArrayGetCount'と' JSPropertyNameArrayGetNameAtIndex'を使用してその配列を処理できます。 –