Хранение и извлечение строк HTML для динамических страниц в UIWebView - PullRequest
0 голосов
/ 21 марта 2012

Я программирую для iPhone, создавая приложение, которое показывает различные локально сохраненные HTML-страницы в UIWebView. Все страницы идентичны по структуре и стилю, с единственным отличием - их содержание.

Прямо сейчас у меня запрограммировано «Основное представление» (UITableView), и когда пользователь выбирает ячейку, общий навигационный контроллер помещает «Подробное представление» в стек, который содержит UIWebView. Когда будет отображен подробный вид, его HTML-содержимое WebView загружается в.

Поскольку все страницы структурно идентичны, я подумал, что было бы проще настроить страницу шаблона HTML и загрузить текст. Насколько я понимаю, так работает PHP. Пользователь загружает страницу Amazon для элемента, каждый из которых имеет идентичную структуру и стиль, но код PHP извлекает заголовок, описание и т. Д. Для этого конкретного элемента.

Я хочу знать, как лучше всего это сделать на iPhone с UIWebView. Поскольку я не веб-волшебник и не знаком с Javascript, не говоря уже о PHP, моя мысль заключалась в следующем:

Загрузить шаблон HTML из локального файла в объект NSString. Шаблон содержит теги со специальными идентификаторами, чтобы указать, куда идут фрагменты текста. Используйте NSString методы поиска и замены, чтобы найти каждый специальный тег и вставить соответствующие фрагменты текста.

Это будет просто для программирования, и я верю, что это будет довольно эффективно, тем более, что я делаю только 4-5 замен, когда загружаю страницу. Если у кого-то есть лучшее предложение (особенно полное предложение), я бы не стал его слышать.

Так вот, это не совсем моя проблема. Мне больше интересно, как лучше всего хранить и извлекать многострочные HTML-строки, которые будут вставлены в шаблон. Насколько я знаю, на обычных веб-страницах PHP извлекает фрагменты XML-файла или выполняет запросы к базе данных SQL.

Два метода хранения / извлечения данных, с которыми я знаком на iPhone, - это файлы Plist и файлы Strings. Файлы строк кажутся мне довольно удобными, так как они могут хранить многострочные строки, за исключением того, что мне придется экранировать каждую двойную кавычку в любом месте строки (а некоторые есть, так как это HTML) и что файлы Strings, кажется, специально разработаны Apple для интернационализации, а не динамических веб-страниц.

Что касается файлов Plist, вы можете легко иметь массив строк, но он не является многострочным. Редактор Plist в последней версии XCode показывает только одну строку за раз, что делает его немного раздражающим в работе, и еще раз заставляет меня чувствовать, что я иду против намеренного использования Apple Plist, заполняя его огромными строками. Во-вторых, единственный способ, которым я могу найти чтение данных из Plist, - это загрузить все это в NSData или сериализовать его в объекты и тому подобное. Я чувствую, что было бы глупо повторно сериализовать Plist каждый раз, когда мне нужно перенастроить мой UIWebView, и тратить впустую память на сериализацию Plist и сохранять результирующие объекты в памяти все время, пока работает мое приложение. Я полагаю, это не может занять , что много памяти, так как это просто текст, но я не совсем уверен.

Может случиться так, что вместо изменения HTML до его доставки в WebView у меня должен быть шаблон Javascript в HTML, который извлекает строки из локального XML-файла (а Objective-C просто анализирует ключевые строки в JS перед передачей HTML в WebView), чтобы логика JS WebView выполняла фактические замены. Однако я не знаю, как это сделать, и учебники по AJAX, которые я обнаружил, всегда ссылались на внешние серверы, библиотеки сценариев, которые я не знал, как использовать с UIWebView и т. Д.

В заключение, я был бы благодарен за любой совет о том, как это осуществить. Каким бы ни было ваше предложение, чем оно подробнее, тем лучше.

1 Ответ

1 голос
/ 21 марта 2012

Насколько я знаю, на обычных веб-страницах PHP извлекает фрагменты файла XML или запросы к базе данных SQL

Нет. Ну, да, это возможно. Но PHP может выводить что угодно. Очень похоже на Objective-C.

Два метода хранения / извлечения данных, с которыми я знаком на iPhone, - это файлы Plist и файлы Strings.

Это просто специальные форматы, распространяемые Apple. Вы можете использовать любой формат файла, который вы хотите. Используйте stringWithContentsOfFile

Мне кажется, что было бы глупо повторно сериализовать Plist каждый раз, когда мне нужно перенастроить мой UIWebView, и тратить впустую память на сериализацию Plist и сохранять результирующие объекты в памяти все время, пока работает мое приложение.

У вас нет большого выбора. Альтернативный подход: использовать кеширование диска. Сохраните обработанный шаблон как файл при первом обращении к нему. В следующий раз проверьте наличие кэшированного файла.

Возможно, вместо того, чтобы изменять HTML-код перед его доставкой в ​​WebView, я должен иметь ... Логика JS WebView выполняет фактические замены.

Это, наверное, плохая идея. JS намного медленнее и требует больше памяти, чем Obj-C. Кроме того, JS ничего не может сделать, а Obj-C не может.

Если вы не беспокоитесь о неизбежных накладных расходах, вы можете использовать полнофункциональный шаблонизатор

...