iOS:检查远程文件更新

Posted

技术标签:

【中文标题】iOS:检查远程文件更新【英文标题】:iOS: Checking for remote file updates 【发布时间】:2011-04-15 18:26:37 【问题描述】:

我有一些从远程 XML 文件中收集内容的 UITableView。有时文件更新了,但视图没有更新,因为我在 viewDidLoad 方法中加载了文件。

我假设我应该检查 viewDidAppear 并再次加载我的 XML 文件。但我不希望每次用户点击返回该视图时都加载它。

最好的方法是什么?我可以以某种方式检查网络上远程文件的更新日期吗?或者我应该将更新的日期存储在我的应用程序中,然后每隔一段时间检查一次?必须有首选的方法来执行此操作,以便我知道 XML 文件已更新。

谢谢。

【问题讨论】:

我不知道是否有“首选方式”,因为每个应用程序都有自己的一组要求。这是数据的实时馈送,更新是必不可少的吗?或者可以延迟吗?您是否有理由不能使用服务器提供的缓存控制,并据此确定何时重新加载数据? 【参考方案1】:

我建议向开销很小的页面发出 get 请求,其中仅包含检查版本是否已更改所需的数据。

ios 应用上,存储您存储的最后一个版本值,并对照您拉出的这个小页面检查它。如果页面上的值更大(更新),则拉取完整的 XML 文件。

此版本值可以是更新日期时间或版本号。我目前不在 Mac 上,所以测试 Obj-C 代码并非易事,但这里有一些伪代码:

int versionNumber; // can be a datetime as well
...
void pullXmlIfAvailable() 
    int latestVersionNumber = parseVersionNumberFromPage(URLget("myurl.com/check.xml")).to_i();

    if (latestVersionNumber > versionNumber)
        DataClass xml = parseDataFromLargerFile(URLget("myurl.com/bigfile.xml"));

【讨论】:

【参考方案2】:

也许您可以在您的应用程序进入后台时立即加载新数据(在您的应用程序委托中检测到)。

一个选项:

将您的数据对象保存在您的应用委托类中,并在包含您的UITableView 的控制器中引用它。当您的视图控制器调用viewDidAppear 时,只需调用您的reloadDataUITableView

【讨论】:

【参考方案3】:

与其向服务器询问版本号或更新日期,不如告诉服务器您的远程(基于客户端)版本的版本号或更新日期。

然后,您的服务器会决定您是否已经拥有最新版本 (A) 或是否需要新版本 (B):

获取请求:http://www.example.com?lastUpdate=11050111042011 回答 A:您是最新的 响应 B:XML 数据

【讨论】:

【参考方案4】:

其他答案已经很好地涵盖了“我什么时候应该重新加载”文件。

另一件需要考虑的事情是使用如今在 tableview 应用程序中非常常见的“拉动刷新”比喻,因为它为用户提供了一种查看数据上次更新时间和请求立即更新数据的方式。

请参阅 iPhone Pull Down Refresh like Tweetie 了解一些可以非常直接地实现它的库。

【讨论】:

【参考方案5】:

您需要从应用程序发送简单的请求(可能通过计时器事件),它会询问服务器有关更新的信息。如果您在服务器上的内容已更新,那么您需要在应用程序中重新加载您的内容。 您可以跟踪服务器上的更改时间和应用程序中的最新内容更新时间。

【讨论】:

@Nic Hubbard,如果答案解决了你的问题,你能接受吗?

以上是关于iOS:检查远程文件更新的主要内容,如果未能解决你的问题,请参考以下文章

检查远程服务器上的文件,如果存在,下载它

iOS tableview应用程序中的远程更新sqlite数据库[关闭]

iOS 8 检查远程通知类型的权限

Xcode 12:无法在 iOS 设备上启动远程服务“com.apple.debugserver”

Phonegap混合iOS应用程序中加载的远程网页可以将数据保存到iOS文件系统吗?

06-STM32+ESP8266+AIR202/302远程升级篇-STM32+Air302(NB-IOT)实现利用http远程更新STM32程序(TCP指令实现http,单片机程序检查更新)