Проблема памяти NSMutableDictionary - PullRequest
0 голосов
/ 10 декабря 2010

Я работаю над приложением для iPhone, рисуя наложения на карте.Я хочу сохранить массивы, которые содержат наложения в NSMutableDictionary, но работает только последняя сохраненная мной запись:

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

Очевидно, что это проблема с памятью, но, к сожалению, я не знаю, как сохранить данныехранится в словаре.

Это фрагмент кода в анализаторе KML, взятый из примера Apple:

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

}

Заранее спасибо!

1 Ответ

0 голосов
/ 10 декабря 2010

Я полагаю, что [[kurweg valueForKey:@"kmlfile"] description]] всегда возвращает одно и то же значение, и поэтому в вашем словаре всегда есть только одно значение.

...