我想緩存我的nsurlrequest數據。在此之前,我成功地從服務器下載數據,自從我試圖實現這個緩存以來,它一直讓我的應用程序崩潰。我希望有人可以看看我到目前爲止的代碼,並幫助我搞定它。我認爲我已經完成了大約95%的工作。NSURLRequest緩存不起作用
- (IBAction)setRequestString:(NSString *)string
{
//Set database address
NSMutableString *databaseURL = [[NSMutableString alloc] initWithString:@"http://127.0.0.1:29/"]; // imac development
//PHP file name is being set from the parent view
[databaseURL appendString:string];
//call ASIHTTP delegates (Used to connect to database)
NSURL *url = [NSURL URLWithString:databaseURL];
//SynchronousRequest to grab the data, also setting up the cachePolicy
NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:60.0]; //if request dose not finish happen within 60 second timeout.
//This nsdata will be used to put the cache into
NSData *cacheData = [[NSData alloc] init];
//Create my own NSCachedURLResponse and add it to the cache
NSURLResponse *responseToCache = [[NSURLResponse alloc] initWithURL:url MIMEType:@"text/xml" expectedContentLength:[cacheData length] textEncodingName:nil];
//Set up the cache
NSCachedURLResponse *cacheResponse = [[NSCachedURLResponse alloc] initWithResponse:responseToCache data:cacheData];
[[NSURLCache sharedURLCache] storeCachedResponse:cacheResponse forRequest:request];
//check if its really there
NSLog(@"cache = %@", [[NSURLCache sharedURLCache] cachedResponseForRequest:request]);
//If no cache do this stuff, connect to the db and perform these actions. I think this is what i am supposed to be doing.
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
{
if ([data length] > 0 && error == nil){
[self receivedData:data];
}else if ([data length] == 0 && error == nil){
[self emptyReply];
}else if (error != nil && error.code == NSURLErrorTimedOut){
[self timedOut];
}else if (error != nil){
[self downloadError:error];
}
}];
}
只包含鏈接的答案是[認爲不好的做法](http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers)。請總結這裏的內容(不要複製/粘貼),這樣答案就可以獨立運作。如果你不這樣做,那麼你的答案就會被刪除,特別是如果鏈接死亡的話。 – 2012-05-31 09:15:46
猜猜看,鏈接剛剛死亡(而不是來自塞爾達的鏈接)。 – 2012-10-11 13:35:42
鏈接已經死了 – TrekOnTV2017 2013-05-29 17:29:17