在applicationDidEnterBackground期间无法暂停音频

时间:2013-09-17 19:23:31

标签: ios avaudioplayer nstimer appdelegate

我无法更改值或更改声明的任何变量或对象。任何人都可以看到什么是错的吗?

在我的app delegate方法中。

- (void)applicationDidEnterBackground:(UIApplication *)application
{

    MainPage *mp = [[MainPage alloc]init];

    mp.newTime = [[NSDate date] timeIntervalSinceDate:mp.date];
    [mp.timer invalidate];
    mp.switchT = 1;
    mp.playBarButton.enabled = YES;
    mp.pauseBarButton.enabled = NO;
    mp.stopBarButton.enabled = YES;
   [mp.avPlayer pause];

}

以上任何操作均未执行。在我的mainpage.h文件中,我按照以下方式声明:

@property (nonatomic, retain) AVAudioPlayer *avPlayer;
@property (strong, retain) NSTimer *timer;
@property (strong, retain) NSDate *date;
@property (nonatomic) NSTimeInterval newTime;
@property (nonatomic) NSInteger switchT;
@property (strong, nonatomic) IBOutlet UIBarButtonItem *playBarButton;
@property (strong, nonatomic) IBOutlet UIBarButtonItem *pauseBarButton;
@property (strong, nonatomic) IBOutlet UIBarButtonItem *stopBarButton;

当然,在我的实现文件中,这些是合成的,并且所有内容都适用于mainpage.m中的代码,而不是我的appDelegate文件中的代码。有谁能看到这个问题?请注意,这是一个功能齐全的应用程序一切正常,只是无法在我的applicationDidEnterBackground方法中执行以下代码,我假设它是我的属性的方式?我的代码写在app delegate中也没有错误。

2 个答案:

答案 0 :(得分:2)

MainPage *mp = [[MainPage alloc]init];创建 MainPage对象。更改一个对象中的值不会影响不同MainPage对象的显示。

让您的应用委托对您实际显示的对象进行委托,或者在MainPage内为后台通知设置处理程序,以便它可以自行完成工作。

答案 1 :(得分:2)

NSNotificationCenter defaultCenter] addObserver:self selector:@selector(goBackground) name:UIApplicationDidEnterBackgroundNotification object:nil]; // and later
 - (void) goBackground { [timer invalidate], timer = nil; }