मैं सर्वर से एक साधारण JSON फ़ीड खींचने के लिए इस कोड का उपयोग कर रहा हूं:
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFJSONResponseSerializer serializer];
[manager GET:kDataUrl parameters:nil
success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"response: %@", responseObject);
}
failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"JSON DataError: %@", error);
}];
यह काम करता हैं। हालांकि, जब मैं JSON फ़ाइल को KDataUrl में बदलता हूं, और सत्यापित करता हूं कि ब्राउज़र में परिवर्तन किया जाता है, जब मैं ऐप को फिर से चलाता हूं, तो मुझे अभी भी पिछली प्रतिक्रिया मिलती है।
ऐसा लगता है कि AFNetworking किसी भी तरह से कैशिंग हैपुरानी प्रतिक्रिया मुझे यह व्यवहार नहीं चाहिए। मैं वर्तमान फ़ीड डाउनलोड करना चाहता हूं। क्या कैशिंग बंद करने के लिए सेट करने के लिए मुझे कुछ प्रकार की सेटिंग या पैरामीटर सेट करना है?
उत्तर:
उत्तर № 1 के लिए 56लंबी कहानी कम करें, बस अपने AFNetworking प्रबंधक को परिभाषित करें:
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager.requestSerializer setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
का आनंद लें!
जवाब के लिए 12 № 2
आप जो अनुभव कर रहे हैं वह यूआरएल कैश का प्रभाव है (देखें NSURLCache)।
अनुरोध के कैशिंग व्यवहार को "कैश नीति" सेट करके परिभाषित किया जा सकता है NSMutableURLRequest
वस्तु, उदा .:
NSMutableURLRequest* request = ...;
[request setCachePolicy: myCachePolicy];
डिफ़ॉल्ट कैशिंग व्यवहार (NSURLRequestUseProtocolCachePolicy
) वर्तमान प्रोटोकॉल के लिए उपयुक्त है, जो HTTP है। और HTTP प्रोटोकॉल के लिए, एक जीईटी अनुरोध डिफ़ॉल्ट रूप से कैश किया जाएगा!
और, AFNetworking अनुरोध के डिफ़ॉल्ट व्यवहार को नहीं बदलता है!
अब, आप एक और कैश नीति सेट कर सकते हैं, उदाहरण के लिए:
NSURLRequestReloadIgnoringLocalCacheData
निर्दिष्ट करता है कि यूआरएल लोड के लिए डेटा मूल स्रोत से लोड किया जाना चाहिए। यूआरएल लोड अनुरोध को पूरा करने के लिए कोई मौजूदा कैश डेटा इस्तेमाल नहीं किया जाना चाहिए।
यह वांछित व्यवहार है जिसे आप प्राप्त करना चाहते हैं:
[request setCachePolicy: NSURLRequestReloadIgnoringLocalCacheData];
यहां समस्या यह है कि सुपर "सुविधाजनक" एपीआई अनुरोध के यूआरएल कैश व्यवहार को कॉन्फ़िगर करने का एक तरीका प्रदान नहीं करता है। आप उपयोग किए गए अनुरोध तक बिल्कुल नहीं पहुंच सकते हैं।
इस प्रकार, मैं निम्न स्तर एपीआई का उपयोग करने का सुझाव दूंगा जहां आपके पास बनाए गए बारे में नियंत्रण है NSMutableURLRequest
ऑब्जेक्ट, और तदनुसार कैश नीति सेट करें।
उत्तर № 3 के लिए 1
बस करो:
manager.requestSerializer.cachePolicy = NSURLRequestCachePolicyReturnCacheDataElseLoad
उत्तर के लिए 1 № 4
अपने यूआरएल के अंत में कुछ बकवास जोड़ने की कोशिश करें (उदाहरण के लिए, टाइमस्टैम्प)
kDataUrl = [NSString stringWithFormat:@"%@?%f", kDataUrl, [NSDate timeIntervalSinceReferenceDate]];
इस मामले में, आप हर बार ताजा डेटा का अनुरोध करेंगे। ये मेरे लिए सही है))
जवाब के लिए 0 № 5
मैं इसके बारे में अच्छा महसूस नहीं करता हूं, लेकिन यहां क्या काम करता है। ऐपडिलेगेट में फिनिश लांचिंग विथऑप्शन:
NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0
diskCapacity:0
diskPath:nil];
[NSURLCache setSharedURLCache:sharedCache];
जवाब के लिए 0 № 6
स्विफ्ट poeple के लिए
let manager = AFHTTPSessionManager()
manager.requestSerializer.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringCacheData
उत्तर के लिए 0 № 7
AFNetworking 3 के साथ:
NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
sessionConfiguration.requestCachePolicy = NSURLRequestReloadIgnoringLocalCacheData;
AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithBaseURL:baseURL
sessionConfiguration:sessionConfiguration];
जवाब के लिए 0 № 8
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager.requestSerializer setValue:@"no-store" forHTTPHeaderField:@"Cache-Control"];
[manager.requestSerializer setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
जोड़ना Cache-Control:no-store
अनुरोध के लिए हेडर, मान लें कि आपका सर्वर सही ढंग से कार्यान्वित किया गया है, इस प्रकार एक ही शीर्षलेख के साथ प्रतिक्रिया को वापस कर देगा NSURLCache
इस हेडर वाले किसी भी अनुरोध के लिए डिस्क कैश।