iOS:检查远程文件更新

时间:2011-04-15 18:26:38

标签: iphone objective-c ios uitableview asihttprequest

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

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

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

感谢。

5 个答案:

答案 0 :(得分:0)

我建议对一个开销非常小的页面发出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"));
}

答案 1 :(得分:0)

也许您可以在将应用程序带到后台(在应用程序代理中检测到)时正确加载新数据。

这个选项:

  • 将您的数据对象保留在您的app委托类中,并在包含UITableView的控制器中引用它。当您的视图控制器拨打viewDidAppear时,只需致电您reloadData的{​​{1}}。

答案 2 :(得分:0)

为什么不告诉服务器远程(基于客户端)版本的版本号或更新日期,而不是向服务器询问版本号或更新日期。

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

答案 3 :(得分:0)

其他答案已经涵盖了“何时应该重新加载”文件。

另一件需要考虑的事情是使用目前在tableview应用程序中非常常见的“拉动刷新”比喻,因为它为用户提供了一种既可以看到上次更新数据又可以立即更新数据的方法。

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

答案 4 :(得分:0)

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