2013-03-01 4 views
5

से लोड एनएसडीटा को कभी भी रिलीज़ नहीं करता है इसलिए मैं कुछ छवियों को स्टोर करने के लिए Core Data का उपयोग करता हूं। (इसके अलावा उपवर्ग mogenerator नवीनतम के साथ उत्पन्न होता है)कोर डेटा बाहरी स्टोरेज

(और यह भी मैं एआरसी उपयोग कर रहा हूँ)

हाँ मैं जानता हूँ कि मैं सिर्फ एक संदर्भ रखने के लिए और डिस्क पर संग्रहीत सकता है, लेकिन मैंने सोचा था कि:

"अरे उन्होंने एक विकल्प बनाया ताकि मैं इसे स्वयं प्रबंधित कर सकूं!"

तो मैंने इसे आजमाया और यह पूरी तरह से काम करता है कि कभी भी जारी नहीं किया गया है।


enter image description here

enter image description here


ViewController जो वाला छवियों को प्रदर्शित करने के आरोप में हो रहा है के प्रारंभ में मैं यह हमेशा की तरह मुख्य NSManagedObjectContext दे।

और viewDidAppear में मैं छवियों के साथ UIScrollView की स्थापना की एक विधि कहा जाता है में:

संपादित करें: तो यह वास्तव में एक लाने का अनुरोध मैं एक Entity1 है जो नहीं है एक-से-कई छवियों और मैं साथ छवियों को पाने के लिए इसका उपयोग करें मुझे यह इकाई 1 उसी संदर्भ से प्राप्त होती है। मैं बस बेहतर व्याख्या करने के लिए सरल बनाना चाहता था।

- (void)setupScrollViewWithEntity1:(Entity1 *)entity1 { 
    DDLogVerbose(@"-- %@ : SETUP SCROLL VIEW --", self); 
    // I remove any previous subviews 
    [self.scrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; 
    self.scrollView.contentSize = self.scrollView.frame.size; 

    /* Here I get the imagesArray with a NSFetchRequest */ 
    //So it's not really a fetch request I have an `Entity1` which have one-to-many with images and I use it to get the images 
    NSSet *imagesSet = entity1.images; 


    // So I have an NSArray holding all the Image object 
    for (Image *image in imagesSet) { 
     CGRect frame = self.scrollView.frame; 
     frame.origin.x = image.numberValue*frame.size.width; 
     UIScrollView *scrollView = [[UIScrollView alloc]initWithFrame:frame]; 
     scrollView.contentSize = self.scrollView.frame.size; 
     UIImageView *imageView = [[UIImageView alloc]initWithFrame:self.scrollView.frame]; 
     imageView.image = [UIImage imageWithData:image.image]; 
     imageView.contentMode = UIViewContentModeScaleAspectFit; 
     imageView.userInteractionEnabled = YES; 
     [scrollView addSubview:imageView]; 
     scrollView.delegate = self; 
     scrollView.minimumZoomScale = 1.0; 
     scrollView.maximumZoomScale = 3.0; 
     [self.scrollView addSubview:scrollView]; 
    } 
} 

}

viewWillDisappear में मैं NSManagedObjectContext बचाने के लिए और मैं जब नियंत्रक dealloc'ed हो जाता है उम्मीद करेंगे सभी डेटा भी होता है, लेकिन यह हमेशा के लिए स्मृति में ही बनी रहे।

यह लाइन किसी भी तरह रखती है यह पता नहीं क्यों: imageView.image = [UIImage imageWithData:image.image];

मैं इस पर 3 दिन बिताए अगर मैं एक मजबूत संदर्भ कहीं नहीं रख था सब कुछ, Instruments, फिर से जांचा उपयोग करने के लिए कोशिश कर रहा।

बात UIViewController हो जाता है dealloc 'एड कि मैं, मैं Allocation उपकरण के साथ Instruments में देख यकीन है, लेकिन किसी कारण से डेटा एप्लिकेशन दुर्घटनाओं जब तक हमेशा के लिए स्मृति में रहता है।


यहाँ की सूची है ~ स्मृति में 20 छवियों dealloc'ed हो रही नहीं:

enter image description here


और यहाँ है पहली वस्तु के लिए विवरण:

enter image description here

यहां तक ​​पढ़ने के लिए धन्यवाद, मैं हूं वास्तव में हताश :(

+0

क्या आप आर्क का उपयोग कर रहे हैं? – J2theC

+0

हां मैं इसका उल्लेख करना भूल गया लेकिन मैंने इसे टैग किया है कि मुझे इसे संपादित करने दें – ItsASecret

+2

क्या प्रबंधित ऑब्जेक्ट संदर्भ दृश्य नियंत्रक से परे जीवित रहता है? यदि ऐसा है तो क्या संभव है कि आपको परिपत्र संदर्भों के साथ ऑब्जेक्ट ग्राफ़ मिल गया हो और आप स्पष्ट रूप से अपनी ऑब्जेक्ट को गलती करने में असफल हो रहे हैं? – Tommy

उत्तर

2

क्या आपने छवियों के साथ NSManagedObjectContext पर reset पर कॉल करने का प्रयास किया है? यह किसी भी लोड ऑब्जेक्ट्स को इन-मेमोरी ऑब्जेक्ट ग्राफ़ से निकलता है। इसके बाद उन्हें अगली बार डिस्क/डीबी से लाने की आवश्यकता होगी।

+0

तो अजीब मैं आश्वस्त था कि मैंने पहले ही कोशिश की है! लेकिन यह बहुत बहुत धन्यवाद काम करता है – ItsASecret