【发布时间】:2014-03-18 10:19:31
【问题描述】:
我需要一些帮助。我整天都被这个问题困住了,我找不到解决办法。我会尽量清楚我的问题。
我有 2 个视图控制器。一种称为 ViewController,另一种称为 GameViewController。在 ViewController 我有我的主屏幕菜单,在 GameViewController 我有游戏屏幕和游戏结束屏幕。当你从 ViewController 按下 play 时,它会将你带到 Game,然后当你死后,你会留在同一个 GameViewController 但在 Game Over 视图中。如果您在 Game Over 屏幕中按重新启动,segue 会以模态方式将您带回 Game Screen。
这就是我遇到的问题。
当你第一次死亡并进入游戏结束屏幕时,你可以点击主页,它会带你回家,但是如果你按重启,然后再次死亡(即两次)然后尝试从游戏结束屏幕它不会运行主页按钮内的代码。该按钮实际上是有效的,我在它们中有一个 NSLog,它显示在调试器屏幕中。我知道很奇怪。请参阅下面的代码,该代码将显示我为尝试完成这项工作所做的一切。
在 GameViewController.h //上面所有的#imports
@class GameViewController;
@protocol GameViewControllerDelegate <NSObject>
-(void) GameViewControllerDidCancel:(GameViewController *)controller;
- (IBAction)homeBtn:(id)sender;
@end
这只是在 @Interface 中的 close } 之后
@property (nonatomic, weak) id <GameViewControllerDelegate> delegate;
在 @Implementation 之后的 GameViewController.m 中
@synthesize delegate = _delegate;
这个在我家Btn
- (IBAction)homeBtn:(id)sender {
NSLog(@"home btn pressed");
[self.delegate GameViewControllerDidCancel:self];
}
然后在我的 ViewController.h 中
#import "GameViewController.h"
@interface ViewController : UIViewController <GameViewControllerDelegate>
ViewController.m
当我按下播放键时
- (IBAction)playButton:(id)sender {
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
UIStoryboard* sb = [UIStoryboard storyboardWithName:@"Main_iPad"
bundle:nil];
GameViewController* controller= [sb instantiateViewControllerWithIdentifier:@"GML"];
controller.delegate = self;
[self presentViewController:controller animated:NO completion:nil];
[audioPlayer stop];
}else {
UIStoryboard* sb = [UIStoryboard storyboardWithName:@"Main_iPhone"
bundle:nil];
GameViewController* controller= [sb instantiateViewControllerWithIdentifier:@"GML"];
controller.delegate = self;
[self presentViewController:controller animated:NO completion:nil];
[audioPlayer stop];
}
}
我尝试从 homeBtn 调用的方法也在这里
#pragma mark - GameViewControllerDelegate
- (void) GameViewControllerDidCancel:(GameViewController *)controller {
[self dismissViewControllerAnimated:NO completion:nil];
}
我很确定就是这样。所以就像我之前说的,重启按钮只是链接到一个 segue 返回到游戏屏幕。
拜托各位,我现在真的很绝望,我完全没有想法。
谢谢
【问题讨论】:
-
您是否通过将NSLog添加到GameViewControllerDidCancel委托方法来检查该方法是否被调用?
-
在标题中加上 URGENT 不会帮助您获得更好/更快的帮助。
-
我在 Viewcontroller 的 GameViewControllerDidCancel 方法中添加了一个 NSLog。如果我不在 gameOver 屏幕中重新启动,则会出现日志。但是,如果我重新启动然后死掉并按主页,则日志不会出现。但是 HomeBtn 中的 NSLog 确实出现了。所以按钮正在工作,但方法没有触发
-
jcm 写“在标题中添加紧急信息不会帮助您获得更好/更快的帮助”也对我没有帮助。干杯
标签: ios objective-c ios7 delegates viewcontroller