In my app I load some static JSON string from some server.

Every now and then the JSON file is updated and then I want the app to reload the data.

Now, that I updated the file on the server the app does not reflect the change. If I take the URL to that file from the app's code and copy it into a browser and fetch the file there, I clearly see the updates. But when I run the app and log the json string to the debug console, then I clearly see an outdated version of the file's content.

Is there any caching involved? Can I force the iOS to actually reload it?

This is how I load it now:

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]]);

The option NSDataReadingUncached should prevent the system from caching the data.

PS: When I run the app on a different device, then it receives the current data. But when I again let it run on the original device - on which I observe this behaviour - then the data "received" is still outdated. So it really looks like some cashing issue to me.

有帮助吗?

解决方案

Here is an idea. Try calling

[[NSURLCache sharedURLCache] removeAllCachedResponses];

For more granular control on cashing use NSURLConnection or NSURLSession.

其他提示

I did try Mundi's suggestion, to try clearing the cache, but this didn't make any difference in my iPhone app.

So, I tried a trick which I use in my Angular webapps, and appended the current time (in ticks) to the URL I'm attempting to open, and that did work:

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

(Sigh.)

I'm getting too old for this stuff....

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top