Я пытаюсь сгенерировать 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:
?
Обновление
С другой стороны, я не знаю почему, но мое регулярное выражение #{([^}]+)}
не соответствует ожидаемому. Любой другой симулятор регулярных выражений, с которым я столкнулся, кажется, просто отлично подходит, но он не совпадает с obj-c на iOS. Есть ли что-то, что я пропускаю с побегами в наборе символов #{}
?