2011-08-26 23 views
10

मैं webservice कॉल, कैशिंग और etags के लिए RestKit का उपयोग कर रहा हूँ। मैंने अपना खुद का कॉर्डेटा मॉडल और प्रबंधित ऑब्जेक्ट्सआईओएस - सभी डेटा को पुन: स्थापित करें और साफ़ करें?

जैसे ही उपयोगकर्ता साइन आउट करता है मुझे डेटाबेस में सभी डेटा साफ़ करने की आवश्यकता होती है। मैं सफलतापूर्वक एसक्लाइट फ़ाइल को हटाने और इसे फिर से बनाने में सक्षम था, लेकिन मुझे सभी RestKit पकड़ने और डेटा को साफ़ करने के लिए कोई रास्ता नहीं मिल रहा है। मैं RestKit द्वारा संग्रहीत सभी डेटा को पूरी तरह से कैसे मिटा सकता हूं?

उत्तर

14

आप कैश साफ साफ करने के लिए [[RKClient sharedClient].requestCache invalidateAll]; कॉल करना चाहते हैं। आप API docs देख सकते हैं।

+8

RestKit 0.20 के रूप में आपको '[[RKManagedObjectStore defaultStore] resetPersistentStores: nil] का उपयोग करने की आवश्यकता होगी; ' –

+0

RestKit 0.20 का उपयोग करके मेरे लिए काम किया http://stackoverflow.com/a/18425303/1318202 –

+0

हाय @ ब्लेक-वाटर्स कैसे 0.20 संस्करण में ऐसा करें –

4

RKManagedObjectStore क्लास से निम्न विधि का उपयोग करें।

- (void)deletePersistantStoreUsingSeedDatabaseName:(NSString *)seedFile

http://restkit.org/api/0.9/Classes/RKManagedObjectStore.html#//api/name/deletePersistantStoreUsingSeedDatabaseName:

+0

मेरी बीज फ़ाइल क्या होगी? मेरे पास मेरा अपना मूल डेटा मॉडल और संदर्भ है, मैं उस – aryaxt

+1

के लिए रेस्टकिट का उपयोग नहीं करता उस मामले में आपके प्रश्न का उत्तर यहां दिया गया था: http://stackoverflow.com/questions/1077810/delete-reset-all-entries-in- कोर-डेटा –

+0

मुझे नहीं लगता कि वे एक ही sqlite फ़ाइल में कैश और etags स्टोर करते हैं। वर्तमान में मैं अपना स्क्लाइट हटा देता हूं और इसे फिर से बना देता हूं और जब मैं webservice को कॉल करता हूं, तो RestKit पिछले कैश किए गए डेटा को वापस देता है, इसलिए मैं अपने पुराने डेटा को फिर से समाप्त करता हूं। – aryaxt

2

Restkit 0.20 में इस प्रयास करें:

[[NSURLCache sharedURLCache] removeAllCachedResponses]; 

मेरे लिए काम किया =)

0

RestKit 0.20.2 में निम्न उदाहरण काम कर देता है। फ़ाइल आधारित RKTestFactory.m में RestKit/परीक्षण घटक में पाया गया इसका बंद कोड और मेरी परियोजना में बहुत अच्छा काम किया है।

इसके अलावा, यदि रेस्टकिट आपके कोरडाटा स्टैक का प्रबंधन कर रहा है, तो मेरा सेट कैसे स्थापित किया गया है, किसी भी NSFetchedResultsController को हटाने के लिए याद रखें जो आपके RestKit सेटअप में NSManagedObjectContext का उपयोग कर रहे हैं।

- (void)tearDownRestKit 
{ 
    // Cancel any network operations and clear the cache 
    [[RKObjectManager sharedManager].operationQueue cancelAllOperations]; 
    [[NSURLCache sharedURLCache] removeAllCachedResponses]; 

    // Cancel any object mapping in the response mapping queue 
    [[RKObjectRequestOperation responseMappingQueue] cancelAllOperations]; 

    // Ensure the existing defaultStore is shut down 
    [[NSNotificationCenter defaultCenter] removeObserver:[RKManagedObjectStore defaultStore]]; 

    // Not be needed if not using indexer 
    if ([[RKManagedObjectStore defaultStore] respondsToSelector:@selector(stopIndexingPersistentStoreManagedObjectContext)]) { 
     // Search component is optional 
     [[RKManagedObjectStore defaultStore] performSelector:@selector(stopIndexingPersistentStoreManagedObjectContext)]; 

     if ([[RKManagedObjectStore defaultStore] respondsToSelector:@selector(searchIndexer)]) { 
      id searchIndexer = [[RKManagedObjectStore defaultStore] valueForKey:@"searchIndexer"]; 
      [searchIndexer performSelector:@selector(cancelAllIndexingOperations)]; 
     } 
    } 

    [RKObjectManager setSharedManager:nil]; 
    [RKManagedObjectStore setDefaultStore:nil]; 
} 
संबंधित मुद्दे