Вы не сохраняете свои UIImages, поэтому они автоматически выпускаются. После каждого звонка с именем image вам нужно удерживать, т. Е.
baby = [[UIImage imageNamed:@"baby.png"] retain];
или, если вы объявили их как свойства (т. Е. @property (nonatomic, retain) UIImage *baby;
), вы можете сделать это:
self.baby = [UIImage imageNamed:@"baby.png"];
что является более правильным способом сделать это.
Однако, лучший способ справиться со всем этим кодом - это использовать массив изображений вместо того, чтобы каждый раз проверять имя. т.е.
imageArray = [NSArray alloc] initWithObjects:
[UIImage imageNamed:@"Anvil.png"],
[UIImage imageNamed:@"Apple.png"],
[UIImage imageNamed:@"Arrow.png"],
nil];
и затем, когда элемент выбран,
- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
[object setImage:[imagearray objectAtIndex:row]];
}
немного чище;)
РЕДАКТИРОВАТЬ: Дуглас имел ту же идею для очистки кода, когда я писал вторую половину моего ответа