Iphone 储存及保养;在UIWebView中检索动态页面的HTML字符串

Iphone 储存及保养;在UIWebView中检索动态页面的HTML字符串,iphone,html,dynamic,uiwebview,plist,Iphone,Html,Dynamic,Uiwebview,Plist,我正在为iPhone编程,创建一个应用程序,在UIWebView中显示各种本地存储的HTML页面。所有的页面在结构和样式上都是相同的,唯一的区别是它们的内容 现在,我用“主视图”(UITableView)对其进行编程,当用户选择一个单元格时,整体导航控制器将“详细视图”推到堆栈上,该堆栈包含UIWebView。显示详细视图时,其WebView HTML内容将加载到 因为所有页面在结构上都是相同的,所以我认为设置一个HTML模板页面并加载到文本中会更简单。据我所知,PHP就是这样工作的。用户为一个

我正在为iPhone编程,创建一个应用程序,在UIWebView中显示各种本地存储的HTML页面。所有的页面在结构和样式上都是相同的,唯一的区别是它们的内容

现在,我用“主视图”(UITableView)对其进行编程,当用户选择一个单元格时,整体导航控制器将“详细视图”推到堆栈上,该堆栈包含UIWebView。显示详细视图时,其WebView HTML内容将加载到

因为所有页面在结构上都是相同的,所以我认为设置一个HTML模板页面并加载到文本中会更简单。据我所知,PHP就是这样工作的。用户为一个项目加载一个Amazon页面,每个页面都有相同的结构和样式,但PHP代码为该特定项目添加了标题、说明等

我想知道在带有UIWebView的iPhone上实现这一点的最佳方法。由于我不是web向导,也不熟悉Javascript,更不用说PHP了,我的想法是:

将HTML模板从本地文件加载到NSString对象中。该模板包含带有特殊ID的标记,以指示文本片段的去向。使用NSString find&replace方法定位每个特殊标记并插入适当的文本片段

这将是简单的程序,我相信它也将是相当有效的,特别是因为我只做4-5更换,当我加载页面。如果有人有更好的建议(特别是彻底的建议),我不介意听

这不是我的问题。我更想知道存储和检索将插入模板的多行HTML字符串的最佳方法是什么。据我所知,在普通web页面上,PHP检索XML文件的片段,或对SQL数据库的查询

我在iPhone上熟悉的两种数据存储/检索方法是Plist文件和Strings文件。字符串文件对我来说似乎相当方便,因为它们可以存储多行字符串,但我必须在字符串中的任何位置转义每个双引号(还有一些,因为它是HTML),而且字符串文件似乎是苹果专门为国际化而设计的,而不是动态网页

对于Plist文件,您可以很容易地拥有字符串数组,但它不是多行友好的。最新XCode中的Plist编辑器一次只显示一行代码,这让使用它有点烦人,再一次让我觉得我用巨大的字符串填充Plist违背了苹果对Plist的预期用途。其次,我能找到的从Plist中读取数据的唯一方法是将整个内容加载到NSData中,或者将其序列化为对象等等。我觉得每次需要重新配置UIWebView时重新序列化Plist都是愚蠢的,在我的应用程序运行的整个过程中序列化Plist并将结果对象保留在内存中会浪费内存。我想它不会占用那么多内存,因为它只是文本,但我不是很确定

这可能是因为,我不应该在HTML交付到WebView之前修改HTML,而应该在HTML中使用模板Javascript从本地XML文件中提取字符串(Objective-C在将HTML提供给WebView之前简单地将关键字符串解析为JS),以便WebView的JS逻辑进行实际替换。然而,我真的不知道如何做到这一点,我发现的AJAX教程总是提到外部服务器、脚本库,我不知道如何与UIWebView一起使用,等等

最后,如果您能就如何开展这项工作提供任何建议,我将不胜感激。不管你的建议是什么,越详细越好

据我所知,在普通的web页面上,PHP检索XML文件的片段或对SQL数据库的查询

不,嗯,是的,可能会。但是PHP可以输出任何东西。很像Objective-C

我在iPhone上熟悉的两种数据存储/检索方法是Plist文件和Strings文件

这些只是苹果传播的特殊格式。您可以使用任何想要的文件格式。使用

我觉得每次需要重新配置UIWebView时重新序列化Plist都是愚蠢的,在我的应用程序运行的整个过程中序列化Plist并将结果对象保留在内存中会浪费内存

你别无选择。另一种方法:使用磁盘缓存。首次访问渲染模板时,将其另存为文件。下次检查是否存在缓存文件

这可能是,我不应该在HTML交付到WebView之前修改它,而是应该。。。WebView的JS逻辑进行实际替换

那可能是个坏主意。JS比Obj-C要慢得多,内存也更紧张。此外,JS做不了什么,Obj-C也做不了什么


如果你不担心不可避免的开销,你可以考虑使用一个功能齐全的

谢谢,你基本上回答了我的问题。看起来我最好的选择是实现一个XML解析对象,将文件读入对象(因为Plist格式无法在其源代码中简单地存储HTML标记),并可能与磁盘缓存一起使用。我感谢你的帮助。