使用stringWithContentsOfURL缓存将url内容写入字符串

时间:2011-10-26 14:02:08

标签: iphone objective-c ios sdk

我的代码是从我的Web服务器上的xml文件中写入url的内容,并将内容存储在字符串中,然后将其写入文档目录中的本地文件。当我第一次加载它时,一切都很顺利,之后即使再次运行此视图,它也将始终获取已经缓存在设备上的内容,并且没有来自Web服务器的更新。

如何强制它每次都从服务器上的文件中读取内容?

NSString * path = @"http://my-domain-name.com/myGlobalFile.xml";
NSString * myStr = [NSString stringWithContentsOfURL:[NSURL URLWithString:path] encoding:NSUTF8StringEncoding error:nil];

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
localFilePath = [documentsDirectory stringByAppendingPathComponent:@"myLocalFile.xml"];
[myStr writeToFile:localFilePath atomically:YES encoding:NSUTF8StringEncoding error:nil];

1 个答案:

答案 0 :(得分:2)

您可以使用NSURLRequestNSURLConnection下载字符串(这实际上是一种更好的处理方式 - 异步 - 您还可以反馈进度(http:// stackoverflow)的.com /问题/ 2267950 /如何对化妆的-进度条换一个-NSURLConnection的-时的下载-A-文件))。

NSURLRequest可以更好地控制您要使用的缓存策略。

您可以按如下方式设置NSURLRequest

NSURLRequest *request=[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://my-domain-name.com/myGlobalFile.xml"] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60.0];

您可以使用http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSURLRequest_Class/Reference/Reference.html中的值替换NSURLRequestReloadIgnoringLocalCacheData(如果您想选择其他政策,请向下滚动到“NSURLRequestCachePolicy”。)

有关如何完成此代码的完整文档(以及您需要实现的必要委托方法),请参阅以下优秀文档:

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html

会告诉你整个过程。