アプリでモデルの HTML 出力を生成しようとしています。これにより、HTML ファイル内のさまざまなスポットを効果的に調べて、モデル内の関連する値で埋めます。もともと HTML テンプレートを書式設定された文字列として使用するつもりでしたが、後でレイアウトなどに何か変更があった場合、値の順序をテンプレートに表示される順序に合わせるのが面倒で面倒になります。 .
代わりに、私がやろうとしているのは、一種の Ruby スタイルのファイルの文字列補間を実行することです。モデルからの値が必要な場合は、必要なモデル属性の名前を次のように入力します#{key.path}
。
次に、次の正規表現でこれを処理しようとしています:
@"#{([^}]+)}"
.
これを処理するために、次のセットアップを使用しています。
NSString *processedTemplate = [regex stringByReplacingMatchesInString:template
options:0
range:NSMakeRange(0, template.length)
withTemplate:[self valueForKeyPath:@"$1"]];
ただし、これを実行すると、次のエラーが表示されます。
*** Terminating app due to uncaught exception 'NSUnknownKeyException',
reason: '[<Plan 0x78349d0> valueForUndefinedKey:]: this class is not
key value coding-compliant for the key $1.'
私が期待しているのは、正規表現の一致を使用して、それを使用してモデルのキー値コーディングに準拠した値を取得できることです。ただし、これは明らかに私が使用している方法では機能しません。
ちなみに、私はこれを正しく使用していると思いますが、これを実行して置き換えるwithTemplate:@"$1"
とNULLになります。だから、私はそれを使ってみました:
NSString *processedTemplate = [template stringByReplacingOccurrencesOfString:@"#{([^}]+)}"
withString:@"$1"
options:NSRegularExpressionSearch
range:NSMakeRange(0, template.length)];
ただし、これを実行すると、 のセクションに置き換えられません()
。どういうわけか、私は正しいことをしていません。誰にもポインタ/解決策がありますか?
アップデート
そのため、withString:
パラメーターは@"$1"
正規表現一致データが検出したものとして解釈されるようです。などのメソッドに渡すことができるように、一致データを取得する別の方法はありますvalueForKeyPath:
か?
アップデート
ちなみに、理由はわかりませんが、正規表現#{([^}]+)}
が期待どおりに一致しません。私が対戦した他の正規表現シミュレーターは、それとうまく一致しているように見えますが、iOS の obj-c では一致しません。文字セットのエスケープで欠けているものはあり#{}
ますか?