NSData dataWithContentsOfUrl:加载过时的数据

时间:2014-05-08 18:05:36

标签: ios objective-c nsdata

在我的应用程序中,我从某个服务器加载了一些静态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:当我在其他设备上运行应用程序时,它会收到当前数据。但是,当我再次让它在原始设备上运行时 - 我观察到这种行为 - 然后数据"收到"仍然过时了。所以它看起来像是一些兑现问题给我。

2 个答案:

答案 0 :(得分:0)

这是一个想法。尝试拨打

[[NSURLCache sharedURLCache] removeAllCachedResponses];

要使用NSURLConnectionNSURLSession进行更精细的兑现控制。

答案 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];

(叹气。)

我对这些东西太老了....