问题描述
- 在两个viewcontroller之间的delegation有问题
- 第一个viewcontroller是排行榜菜单,里面有一个按钮指示到第二个viewcontroller中第二个是小游戏,如果玩家输了,最高分变动,就更新排行榜。在玩家完成游戏时建了带两个按钮的UIAlertView,一个是主菜单,另一个是重新开始,我的代码如下:我想通过delegation更新排行榜
@protocol highScoreProtocol <NSObject> -(void)updateHighScore:(int) score; @end @interface ViewController : UIViewController <UIAlertViewDelegate> @property (nonatomic) int score; @property (nonatomic weak) id <highScoreProtocol> delegateHighScore; @implementation ViewController @synthesize score=_score; @synthesize delegateHighScore=_delegateHighScore; -(void)lostGame{ [self.delegateHighScore updateHighScore:self.score]; UIAlertView *losingScreen=[[UIAlertView alloc]initWithTitle:@""Game Over"" message:[NSString stringWithFormat:@""Your Score Is %d"" self.score] delegate:self cancelButtonTitle:@""Main Menu"" otherButtonTitles:@""Restart"" nil]; } -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ if (buttonIndex==0) { } else if (buttonIndex==1){ } } @end @interface MenuVC : UIViewController <highScoreProtocol> @property (weak nonatomic) IBOutlet UILabel *labelHighScore; @end@implementation MenuVC- (void)viewDidLoad{ [super viewDidLoad]; ViewController *vc=[[ViewController alloc]init]; vc.delegateHighScore=self;}-(void)updateHighScore:(int)score{ if (score>[self.labelHighScore.text integerValue]) { self.labelHighScore.text=[NSString stringWithFormat:@""%d"" score]; } NSLog(@""does this method even run"");}
不知道哪出错了,希望大家帮忙。
解决方案
这行代码不对
ViewController *vc=[[ViewController alloc]init];vc.delegateHighScore=self;
定义了一个新的不相干的viewcontroller。
如果你的情况是这样:定义一个viewcontroller的identifier,选择viewcontroller,……
然后用这行代码:
ViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@""yourIdentifier""];vc.delegateHighScore = self;
时间: 2024-10-03 20:15:15