2013-03-01 8 views
5

Also verwende ich Core Data, um ein paar Bilder zu speichern. (Auch die Unterklasse mit neuesten mogenerator generiert)Core-Daten geben niemals NSData aus dem externen Speicher geladen

(Und auch ARC ich verwende)

Ja, ich weiß, dass ich nur eine Referenz behalten konnte und speichern sie auf der Festplatte, aber ich dachte:

"Hey, sie haben eine Option gemacht, damit ich genau das machen kann, ohne dass ich es selbst verwalten muss!"

Also versuchte ich es und es funktioniert perfekt, außer alle Daten, die Art und Weise geladen wird nie freigegeben.


enter image description here

enter image description here


In der Initialisierung des Viewcontroller, die werde verantwortlich sein hat die Bilder der Anzeige Ich gebe es die übliche Haupt NSManagedObjectContext.

Und in einem Verfahren namens in viewDidAppear ich die UIScrollView mit den Bildern ein:

Edit: a So ist es nicht wirklich Anfrage hole ich einen Entity1 haben, die mit Bildern und ich eine Eins-zu-viele haben benutze es, um die Bilder zu bekommen Ich bekomme diese Entity1 aus dem gleichen Kontext. Ich wollte nur vereinfachen, um es besser zu erklären.

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

}

In viewWillDisappear ich spare die NSManagedObjectContext und ich würde erwarten, wenn der Controller dealloc'ed wird, dass alle Daten würden auch, aber es bleibt für immer in Erinnerung.

Diese Linie irgendwie behält es weiß nicht, warum: imageView.image = [UIImage imageWithData:image.image];

Ich habe 3 Tage auf es zu versuchen, alles zu verwenden, Instruments, nochmals zu überprüfen, ob ich nicht irgendwo einen starken Bezug zu halten habe.

Die Sache ist die UIViewController bekommt dealloc ‚ed, die ich bin mir sicher, ich sehe es in Instruments mit dem Allocation Werkzeug aber aus irgendeinem Grunde bleibt die Daten im Speicher für immer, bis die App Abstürze.


Hier ist die Liste der ~ 20 Bilder im Speicher nicht dealloc'ed bekommen:

enter image description here


Und hier ist die Details für das erste Objekt:

enter image description here

Vielen Dank für das Lesen bis hier, ich bin wirklich verzweifelt :(

+0

verwenden Sie Arc? – J2theC

+0

Ja, ich habe vergessen, es zu erwähnen, aber ich habe es getaggt Lassen Sie mich das bearbeiten – ItsASecret

+2

Beherrscht der Kontext des verwalteten Objekts über den View-Controller hinaus? Wenn ja, ist es möglich, dass Sie einfach einen Objektgraphen mit Zirkelverweisen haben und Sie nicht explizit Fehler an Ihren Objekten feststellen? – Tommy

Antwort

2

Haben Sie versucht, reset auf dem NSManagedObjectContext Aufruf, nachdem Sie mit den Bildern fertig sind? Dadurch werden alle geladenen Objekte aus dem speicherinternen Objektdiagramm entfernt. Sie müssen dann beim nächsten Mal von disk/db geholt werden.

+0

So komisch, ich war überzeugt, dass ich das schon probiert habe! Aber es funktioniert sehr gut – ItsASecret

Verwandte Themen