在我的应用程序中,我从某个服务器加载了一些静态JSON字符串。
每隔一段时间就会更新JSON文件,然后我希望应用程序重新加载数据。
现在,我更新了服务器上的文件,该应用程序未反映更改。如果我从应用程序的代码中获取该文件的URL并将其复制到浏览器并在那里获取文件,我清楚地看到了更新。但是当我运行应用程序并将json字符串记录到调试控制台时,我清楚地看到了该文件内容的过时版本。
是否涉及任何缓存?我可以强制iOS实际重装吗?
这就是我现在加载它的方式:
NSURL * url = [NSURL URLWithString:[DOWNLOAD_URL stringByAppendingString:DOWNLOAD_FILE]];
NSError * error;
NSData *jsonData = [NSData dataWithContentsOfURL:url options:NSDataReadingUncached error:&error];
NSLog(@"JSON: %@", [NSString stringWithUTF8String:[jsonData bytes]]);
选项NSDataReadingUncached
应该阻止系统缓存数据。
PS:当我在其他设备上运行应用程序时,它会收到当前数据。但是,当我再次让它在原始设备上运行时 - 我观察到这种行为 - 然后数据"收到"仍然过时了。所以它看起来像是一些兑现问题给我。
答案 0 :(得分:0)
这是一个想法。尝试拨打
[[NSURLCache sharedURLCache] removeAllCachedResponses];
要使用NSURLConnection
或NSURLSession
进行更精细的兑现控制。
答案 1 :(得分:0)
我确实尝试过Mundi的建议,尝试清除缓存,但这对我的iPhone应用没有任何影响。
所以,我尝试了一个我在Angular webapps中使用的技巧,并将当前时间(以刻度表)附加到我试图打开的URL,并且 工作:
NSString* originalURL = @"http://somewebservices/data/1234";
NSString* newURL = [NSString stringWithFormat:@"%@?t=%f", originalURL,
[[NSDate date] timeIntervalSince1970]];
NSLog(@"Loading data from: '%@'", newURL);
NSURL *url = [NSURL URLWithString:newURL];
if (url == nil)
return false;
NSError *error;
NSData* urlData = [NSData dataWithContentsOfURL:url options:NSDataReadingUncached error:&error];
(叹气。)
我对这些东西太老了....