2010-12-10 7 views
0

Ich arbeite an einer iPhone App Zeichnung Overlays auf einer Karte. Ich mag die Arrays speichern, die die Overlays in einem NSMutableDictionary enthalten, aber nur den letzten Eintrag ich gerettet Werke:NSMutableDictionary Memory Problem

// Get "Kurwege" from CoreData 
NSError * error; 
if(![[self fetchedResultsController] performFetch:&error]) { 
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]); // TODO 
} 

if(self.overlaysDictionary == nil) { 
    self.overlaysDictionary = [[NSMutableDictionary alloc] initWithCapacity:[fetchedResultsController.fetchedObjects count]]; 
} 

NSString *path; 
    for (Kurweg *kurweg in fetchedResultsController.fetchedObjects) { 
    // Locate the path to the .kml file in the application's bundle 
    // and parse it with the KMLParser. 
    path = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%@", [[kurweg valueForKey:@"kmlfile"] description]] ofType:@"kml"]; 
    kml = [[KMLParser parseKMLAtPath:path] retain]; // PROBLEM: Executing this the second time seems to override my data stored in the dictionary 

    // Save overlays in dictionary 
    [self.overlaysDictionary setObject:[kml overlays] forKey:[NSString stringWithFormat:@"%@", [[kurweg valueForKey:@"kmlfile"] description]]]; 
    } 

// Draw overlays 
NSArray *keys = [overlaysDictionary allKeys]; 
for (NSString *key in keys) { 
    // Add all of the MKOverlay objects parsed from the KML file to the map. 
    [map addOverlays:[overlaysDictionary objectForKey:key]]; 
} 

Offensichtlich ist es ein Speicherproblem, aber leider weiß ich nicht, wie die Daten behalten gespeichert im Wörterbuch. Diese

ist ein Auszug aus dem Code in dem KML-Parser, genommen von einem Apple-Beispiel:

- (NSArray *)overlays { 
NSMutableArray *overlays = [[NSMutableArray alloc] init]; 
for (KMLPlacemark *placemark in _placemarks) { 
    id <MKOverlay> overlay = [placemark overlay]; 
    if (overlay) 
     [overlays addObject:overlay]; 
} 
return [overlays autorelease]; 

}

Vielen Dank im Voraus!

+0

Wo und wie ist die Variable 'kml' definiert? – dreamlax

+0

Die kml-Variable ist in der Header-Datei definiert: KMLParser * kml; Wenn möglich, möchte ich nicht den gesamten Parser speichern, sondern nur die Ausgabe (NSArray overlay) – sqeez3r

+0

Mindestens ein Leck tritt auf, wenn ich diesen Code durchlaufe. Könnte das das Problem sein? – sqeez3r

Antwort

0

Meine Vermutung wäre, dass [[kurweg valueForKey:@"kmlfile"] description]] immer den gleichen Wert zurückgibt und Sie nur einen Wert in Ihrem Wörterbuch haben.

+0

Drucken von [[kurweg valueForKey: @ "kmfile"] Beschreibung]] mit NSLog zeigt zwei verschiedene Strings. Das erste Objekt ist verfügbar, solange ich kml = [[KMLParser parseKMLAtPath: path] retain] ein zweites Mal anrufe. – sqeez3r

+0

Dies ist sehr schwierig zu debuggen, ohne mehr Code und Debugger-Ausgabe zu sehen. Meinst du, dass [[kurweg valueForKey: @ "kmlfile"] Beschreibung] zwei Strings jedes Mal zeigt, wenn Sie es aufrufen oder das jedes Mal eine andere Zeichenkette durch den Code zeigt? –

Verwandte Themen