Я разрабатываю приложение для iPhone, и я использую HTML для отображения форматированного текста.
Я часто отображаю ту же веб-страницу, но с другим содержанием. Я хотел бы использовать файл шаблона HTML и затем заполнить его моими различными значениями.
Интересно, имеет ли Objective C шаблонную систему, подобную ERB в Ruby.
Это позволило бы делать вещи как
Шаблон:
<HTML>
<HEAD>
</HEAD>
<BODY>
<H1>{{{title}}}</H1>
<P>{{{content}}}</P>
</BODY>
</HTML>
Objective C (или чем это может быть в идеальном мире),
Template* template = [[Template alloc] initWithFile:@"my_template.tpl"];
[template fillMarker:@"title" withContent:@"My Title"];
[template fillMarker:@"content" withContent:@"My text here"];
[template process];
NSString* result = [template result];
[template release];
И строка результата содержала бы:
<HTML>
<HEAD>
</HEAD>
<BODY>
<H1>My Title</H1>
<P>My text here</P>
</BODY>
</HTML>
Вышеупомянутый пример мог быть достигнут с некоторой текстовой заменой, но это будет болью для поддержания. Мне также было бы нужно что-то как циклы в шаблонах. Например, если бы у меня есть несколько объектов для отображения, я хотел бы генерировать несколько отделений.
Спасибо за чтение :)
Рассматривали ли вы возможность использования в качестве шаблона:
<HTML>
<HEAD>
</HEAD>
<BODY>
<H1>%@</H1>
<P>%@</P>
</BODY>
</HTML>
А затем:
// just to get file name right
NSString* fn =
[NSString stringWithFormat:@"%@/my_template.tpl",
[[ NSBundle mainBundle ] resourcePath ]];
// template
NSError *error;
NSString* template =
[NSString stringWithContentsOfFile:fn
encoding:NSUTF8StringEncoding error:&error];
// result
NSString* result =
[NSString stringWithFormat:template,
@"MyTitle",
@"MyText"];
Я думаю, что это в значительной степени то, что вы хотите.
Конечно, вам придется добавить файлы шаблона в качестве ресурсов в проекте.
Нет, Objective-C не имеет встроенной системы шаблонов. Обычно для простых целей вы просто используете текстовую замену (возможно, через stringWithFormat:
), а для чего-то более продвинутого вы выбираете полноценную систему шаблонов, которая соответствует вашим потребностям.