Как добавить и получить данные из NSDictionary внутри контроллера представления - PullRequest
4 голосов
/ 20 февраля 2011

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

для начала мой .h выглядит так

...
  NSDictionary *images;
}

@property (nonatomic, retain) NSDictionary *images;

и в моем .m я синтезирую свойство и пытаюсь добавить изображение следующим образом:

[self.images setValue:img forKey:@"happy"];

и позже я пытаюсь получить изображение ключом

UIImage *image = [self.images objectForKey:@"happy"];
    if (!image) {
      NSLog(@"not cached");
    }else {
      NSLog(@"had cached img %@", image);
    }

И все же каждый раз, когда я открываю словарь, он становится пустым. Если я @ Synthesize свойство, я должен быть готов к выходу из коробки? или я не правильно добавил это в словарь?

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

1 Ответ

5 голосов
/ 20 февраля 2011

Синтезирование не создает экземпляр переменной, поэтому вам все равно нужно в какой-то момент выделить + инициализировать ее.

Но если вы хотите добавить объекты в словарь после его создания, вам нужно использовать NSMutableDictionaryвместо этого.

Затем alloc + init в viewDidLoad, используя что-то вроде:

self.images = [[[NSMutableDictionary alloc] initWithCapacity:10] autorelease];

Затем для установки значения используйте setObject:forKey: (не setValue:forKey:):

[images setObject:img forKey:@"happy"];

Не забудьте выпустить словарь в dealloc.

...