У меня проблема с моим приложением, когда я отправляю его в фоновый режим с помощью кнопки 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