Я пытаюсь создать 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. Есть ли что-то, что мне не хватает с escape-символами в наборе символов #{}
?