回到前台后的UIImage(iphone多任务处理)

时间:2010-10-08 10:03:56

标签: iphone objective-c cocoa-touch ios4

当我通过主页按钮将其发送到后台时,我的应用程序出现问题。我会尽快但完全描述它:

我在@interface中声明了一个UIImage指针,其中包含以下属性:

@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?对这个问题的任何想法?

提前致谢, 尼科斯

1 个答案:

答案 0 :(得分:3)

尝试

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

而不是

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

您必须使用存取器来保留pauseImg,否则它是自动释放的。