私のアプリでモデルのHTML出力を生成しようとしています。これは、HTMLファイル内のさまざまな場所を効果的に通過し、モデル内の関連する値を入力します。もともとは、HTMLテンプレートを書式設定された文字列として使用する予定でしたが、後でレイアウトやその他のものが変更された場合、テンプレートの表示順に値の順序を合わせるのが面倒で面倒です。iOS NSRegularExpressionを使用したRubyスタイルの文字列補間
代わりに、私がしようとしているのは、ファイルのRubyスタイルの文字列補間の一種を実行することです。どこからでも私はモデルから値を得たいと思うので、私はそうしたいモデル属性の名前を入れます:#{key.path}
。
次に、私は次のRegexでこれを処理しようとしています: @"#{([^}]+)}"
。
*** Terminating app due to uncaught exception 'NSUnknownKeyException',
reason: '[<Plan 0x78349d0> valueForUndefinedKey:]: this class is not
key value coding-compliant for the key $1.'
私は何を期待することは、私が使用できるということです。私はこれを実行すると、私はエラーを取得し、しかし
NSString *processedTemplate = [regex stringByReplacingMatchesInString:template
options:0
range:NSMakeRange(0, template.length)
withTemplate:[self valueForKeyPath:@"$1"]];
:
これを処理するために
、私は次のセットアップを使用しています正規表現と一致し、私のモデルでキー値コーディング準拠の値を取得するためにそれを使用します。しかし、これは明らかに私がそれを使用している方法では動作しません。私はこの権利を使用していると思いますが、これを置き換えて実行すると、withTemplate:@"$1"
はNULLになります。私はこれを実行すると、それは()
にセクションを置き換えるものではありません、しかし
NSString *processedTemplate = [template stringByReplacingOccurrencesOfString:@"#{([^}]+)}"
withString:@"$1"
options:NSRegularExpressionSearch
range:NSMakeRange(0, template.length)];
:だから、私は使用してそれを試してみました。だから私は何か正しいことをしていない。誰でもポインタ/ソリューションを持っていますか?
更新
どんな正規表現マッチデータが見つかりましたとしてwithString:
パラメータが@"$1"
を解釈するようなので、それが見えます。一致データを取得する別の方法がありますので、valueForKeyPath:
などのメソッドに渡すことができますか?
更新
私の側のノートで、私はなぜか分からないが、私はそれが期待するように私の正規表現#{([^}]+)}
は一致していません。他の正規表現シミュレータを使ってみても、それにはうまく一致しているようですが、iOSのobj-cでは一致しません。文字セット#{}
にエスケープしているものがありますか?
私は全体的な問題の解決策を見つけました。http://stackoverflow.com/questions/8935466/grmustache-formatted-numbers-or-an-html-template-engine-with-number-formatting私の上記の実装が実際には機能していなかった理由、またはそれを修正する方法を誰でも知ることができるように、これを開いておいてください。 –