UIImage после возвращения на передний план (многозадачность iphone) - PullRequest
0 голосов
/ 08 октября 2010

У меня проблема с моим приложением, когда я отправляю его в фоновый режим с помощью кнопки home. Я постараюсь описать это коротко, но полностью:

У меня есть UIImage-указатель, объявленный в @interface со следующим свойством:

@property (nonatomic, retain) UIImage *pauseImg;

Этот указатель установлен на изображение, объявленное в viewDidLoad, например:

 pauseImg = [UIImage imageNamed:@"MP_pause.png"];

Тогда у меня есть следующий метод, который использует изображение для кнопки:

- (void)playSong:(NSString *)song {
 if (![song isEqualToString:@"0"]) {
  NSString *filePath = [[NSBundle mainBundle] pathForResource:song ofType:@"mp3"];
  NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:filePath];
  self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:NULL];
  audioPlayer.currentTime = songPosition;
  [audioPlayer setDelegate:self];
  [audioPlayer setVolume:0.8];
  [audioPlayer play];
  NSLog(@"pauseImage: %@", pauseImg);
  [playButton setBackgroundImage:pauseImg forState:UIControlStateNormal];
  [fileURL release];
 }
}

Это работает без проблем, кроме случаев, когда приложение переходит в фоновый режим и возвращается на передний план. Затем указатель указывает на объект AvAudioPlayer вместо изображения, как показано выше в NSLog (первая строка перед входом в фон, вторая строка при возврате на передний план, каждый раз вызывая метод):

2010-10-08 11:41:10.467 CappyBros[864:207] pauseImage: <UIImage: 0x7954f70>
2010-10-08 11:41:23.037 CappyBros[864:207] pauseImage: <AVAudioPlayer: 0x7954f70>
2010-10-08 11:41:23.038 CappyBros[864:207] -[AVAudioPlayer leftCapWidth]: unrecognized selector sent to instance 0x7954f70
2010-10-08 11:41:23.040 CappyBros[864:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[AVAudioPlayer leftCapWidth]: unrecognized selector sent to instance 0x7954f70'

В этой строке происходит сбой приложения, поскольку pauseImg указывает на неправильный объект.

 [playButton setBackgroundImage:pauseImg forState:UIControlStateNormal];

Я прочитал в любом яблочном документе, что кэши изображений очищаются при вводе фона. Причины этого поведения? Почему тогда pauseImg указывает на AvAudioPlayer-Object? Есть идеи по этой проблеме?

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

1 Ответ

3 голосов
/ 08 октября 2010

попробуй

self.pauseImg = [UIImage imageNamed:@"MP_pause.png"];

вместо

pauseImg = [UIImage imageNamed:@"MP_pause.png"];

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...