检查服务器文件更改的应用程序恢复?

我有一个数据plist(方便地命名为Data.plist ),该应用程序启动时更新:

  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Determile cache file path NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *filePath = [NSString stringWithFormat:@"%@/%@", [paths objectAtIndex:0],@"Data.plist"]; NSString *dataURLString = @"http://link/to/Data.plist"; NSURL *dataURL = [[NSURL alloc] initWithString:dataURLString]; NSData *plistData = [NSData dataWithContentsOfURL:dataURL]; [plistData writeToFile:filePath atomically:YES]; NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:filePath]; NSLog(@"The bundle is %@", filePath); self.data = dict; // Configure and show the window [window addSubview:[navigationController view]]; [window makeKeyAndVisible]; return YES; } 

我想能够有一些方法来检查保存的plist对服务器plist – 我已经看到一些使用外部库的实现,但必须在原始的iOS SDK中有东西。 有任何想法吗? 我已经阅读了我所做的任何代码,最终都需要在viewWillAppear实现,但是我不确定代码是什么。

有两件事:第一, dataWithContentsOfURL:通常任何苹果的(诱惑方便) <anything>WithContentsOfURL:方法在现实世界中是非常不安全的。 这意味着在你的请求成功或失败之前,不会执行其他代码。 这意味着,如果服务器不可用或者您的设备没有互联网,或者由于某些其他原因无法检索您的数据,您的手机将坐在那里,直到iOS监视程序进程冻结您的应用程序冻结时间过长,或者只是失败。 那么期待数据的应用程序的其余部分就会让你大吃一惊,因为当你的代码假设你应该的时候,你突然间没有数据。 这是同步请求的许多问题之一。

我不会介绍如何实现asynchronous请求,而是转向Apple的文档,或者您可以使用像http://allseeing-i.com/ASIHTTPRequest/这样的包装器框架来为您做&#x3002; 也看看http://www.cocoabyss.com/foundation/nsurlconnection-synchronous-asynchronous/

要回答您的实际问题,您可以在服务器上使用一个版本号或时间戳文件,并将其与plist一起下载。 在随后的启动中,您可以拉下时间戳/版本号,并将其与您存储的版本号进行比较,如果服务器上的版本更新,则将其拉出并保存新的时间戳/版本号。