2011-04-02 52 views
0

我希望在出现推送通知(推送,短信)时调用我的暂停方法。推送通知出现时暂停游戏

首先,游戏的概念: 当您启动应用程序时,会显示一个主视图,您可以在其中选择三种不同的游戏模式之一。 因此,如果用户在一种游戏模式下玩并获得短信,游戏应该暂停,如果他取消通知,游戏应该继续。

三种不同模式的viewcontrollers的名称是PlayViewController,PlayTwoViewController和TimePlayViewController。

所以,这里是我的appDelegate:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  

// Override point for customization after application launch. 

// Add the view controller's view to the window and display. 
[self.window addSubview:viewController.view]; 
[self.window makeKeyAndVisible]; 

return YES; 

}

- (void)applicationWillResignActive:(UIApplication *)application { [PlayViewController pauseGame]; [PlayTwoViewController pauseGame];[TimePlayViewController pauseGame]; } 


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

}

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

}

-(void)applicationDidBecomeActive:(UIApplication *)application { [PlayViewController pauseGame]; [PlayTwoViewController pauseGame];[TimePlayViewController pauseGame]; } 

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

}

pauseGame方法总是一样的。代码是:

-(IBAction)pauseGame { 

[myTimer invalidate]; 

PauseViewController *screen = [[PauseViewController alloc] initWithNibName:nil bundle:nil]; 
screen.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 
[self presentModalViewController:screen animated:YES]; 
[screen release]; } 

myTimer只是一个NSTimer。

应用崩溃时我的代码生成它上面 控制台说:

2011-04-03 11:22:10.091 APPNAME [458:207] + [PlayViewController pauseGame]:无法识别的选择发送到class 0x1d39c 2011-04-03 11:22:10.093 appName [458:207] *因未捕获的异常'NSInvalidArgumentException'而终止应用,原因:'+ [PlayViewController pauseGame]:无法识别的选择器发送到类0x1d39c' 终止在抛出'NSException'实例后调用

+0

您应该在变量上调用pauseGame - 而不是类。为了弄清楚更多, d需要看代码 – 2011-04-04 01:12:56

+0

你想看更多的代码吗?我已经发布了我的整个应用程序委托和方法,我可以做更多的事情?我不能发布我的应用程序的整个代码,我应该如何调用pauseGame ,你能举个例子吗? – Leon 2011-04-04 16:27:08

+0

你在哪里发布应用代理代码?我看到的只是'PlayViewController pauseGame'这一行。 [PlayTwoViewController pauseGame]; [TimePlayViewController pauseGame];' 我至少需要查看完整的方法,以及pauseGame方法的定义和它们所在的类的名称。我不能给你一个调用pauseGame的例子,因为我不知道方法是在哪里定义的 - 它是代码中的东西,而不是来自iOS SDK的方法 – 2011-04-06 00:23:50

回答

2

执行:

- (void)applicationWillResignActive:(UIApplication *)application 

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIApplicationDelegate_Protocol/Reference/Reference.html

“这种方法被称为让您的应用程序知道它即将从活动转移到非活动状态。对于某些类型的临时中断(例如来电或SMS消息)或用户退出应用程序并开始转换到后台状态时,可能会发生这种情况。处于非活动状态的应用程序将继续运行,但不会将传入的事件分派给响应方。

您应该使用此方法暂停正在进行的任务,禁用定时器并降低OpenGL ES帧速率。游戏应该使用这种方法来暂停游戏。处于非活动状态的应用程序在等待转换到活动状态或背景状态时应该执行最少的工作。“

+0

我简单地加了这个: - (void)applicationWillResignActive:(UIApplication *)application { \t \t [self pauseGame];我的代码,但它不工作,有什么不对? } – Leon 2011-04-02 21:34:07

+0

你确定你把它放在正确的地方 - 这应该在你的应用程序委托中实现。设置一个断点以查看它是否被调用 – 2011-04-02 21:36:20