Я пытаюсь сгенерировать HTML-вывод для модели в моем приложении. Это эффективно пройдет и заполнит различные точки внутри HTML-файла соответствующими значениями в модели. Первоначально я собирался взять HTML-шаблон как форматированную строку, но если что-то изменится позже в макете или что-то еще, это будет просто очень грязно и утомительно, чтобы соответствовать порядку значений в порядке, который они отображают в шаблоне ,Строчная интерполяция в стиле Ruby с iOS NSRegularExpression
Вместо этого я пытаюсь выполнить некоторую строковую интерполяцию файла в стиле Ruby. В любом месте, где я хочу получить значение из модели, я ставлю имя атрибута модели, который я хочу так: #{key.path}
.
Затем, я пытаюсь обработать это с помощью следующего Regex: @"#{([^}]+)}"
.
Для обработки этого я использую следующие настройки:
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)];
Однако, когда я запускаю это не заменить секции в ()
. Так или иначе, я ничего не делаю правильно. У кого-нибудь есть указатели/решения?
Update
Так это выглядит как параметр withString:
будет интерпретировать @"$1"
, как все, что нашел данные матча регулярного выражения. Есть ли другой способ получить данные соответствия, чтобы он мог быть передан таким образом, как valueForKeyPath:
?
Update
На моей стороне записки, я не знаю, почему, но мое регулярное выражение #{([^}]+)}
не соответствует, как я ожидаю, что это. Любой другой симулятор регулярных выражений, с которым я сталкивался, похоже, соответствует ему просто отлично, но он не соответствует в obj-c на iOS. Есть ли что-то, что мне не хватает с экранами на набор символов #{}
?
Я нашел решение общей проблемы здесь http://stackoverflow.com/questions/8935466/grmustache-formatted-numbers-or-an-html-template-engine-with-number-formatting, но я сохраняя это открытым, если кто-то может понять, почему моя реализация выше не работала, или как ее исправить. –