我正在创建一个有2个视图的测验应用程序,MMAppViewController和子视图Level1View。我在MMAppViewController视图中声明了NSInteger属性“theScore”并合成了它。在我的Level1View中,当他们回答正确的问题时,“theScore”int将增加1。分数必须是一个全局变量,因为当你达到这么多分数时,它将解锁下一个级别。
出于某种原因,在我的switch语句中,它只允许我使用setTheScore方法一次。我在switch语句中遇到每个其他set方法的错误。错误:“重复标签setTheScore”。该语句位于pushButtonAnswer方法中:
setTheScore: theScore++;
这是我的代码:
#import "Level1View.h"
#import "MMAppViewController.h"
@implementation Level1View
@synthesize answer;
@synthesize question;
@synthesize userAnswer;
@synthesize theScore;
@synthesize score;
int questionNum=0;
NSInteger score=0;
NSInteger theScore;
BOOL start=FALSE;
BOOL optionNum=FALSE;
-(IBAction)pushBack{
[self dismissModalViewControllerAnimated:YES];
}
-(IBAction)pushButton1{
optionNum=TRUE;
labelAnswer.textColor=[UIColor blackColor];
userAnswer=@"1";
[labelAnswer setText:(@"You chose 'A'")];
}
-(IBAction)pushButton2{
optionNum=TRUE;
labelAnswer.textColor=[UIColor blackColor];
userAnswer=@"2";
[labelAnswer setText:(@"You chose 'B'")];
}
-(IBAction)pushButton3{
optionNum=TRUE;
labelAnswer.textColor=[UIColor blackColor];
userAnswer=@"3";
[labelAnswer setText:(@"You chose 'C'")];
}
-(IBAction)pushButtonAnswer{
labelAnswer.textColor=[UIColor blackColor];
switch (questionNum){
case 1:
if(answer==userAnswer && optionNum==TRUE){
labelAnswer.textColor=[UIColor greenColor];
[labelAnswer setText:(@"correct")];
[self hideButtons];
score++;
[self setTheScore: theScore++];
}
else if(optionNum==FALSE){
[labelAnswer setText:(@"Please choose an answer below:")];}
else{
labelAnswer.textColor=[UIColor redColor];
[labelAnswer setText:(@"wrong")];}
[self hideButtons];
break;
case 2:
if(answer==userAnswer && optionNum==TRUE){
labelAnswer.textColor=[UIColor greenColor];
[labelAnswer setText:(@"correct")];
[self hideButtons];
score++;
[self setTheScore: theScore++];
}
else if(optionNum==FALSE){
[labelAnswer setText:(@"Please choose an answer below:")];}
else{
labelAnswer.textColor=[UIColor redColor];
[labelAnswer setText:(@"wrong")];
[self hideButtons];}
break;
case 3:
if(answer==userAnswer && optionNum==TRUE){
labelAnswer.textColor=[UIColor greenColor];
....
和
#import "MMAppViewController.h"
#import "Level1View.h"
@implementation MMAppViewController
@synthesize theScore;
NSInteger score;
-(IBAction)pushLevel1{
Level1View *level1View = [[Level1View alloc] initWithNibName:nil bundle:nil];
[self presentModalViewController:level1View animated:YES];
theScore++;
}
-(IBAction)pushLevel2{
//Level1View *level1View = [[Level1View alloc] initWithNibName:nil bundle:nil];
//[self presentModalViewController:level1View animated:YES];
NSInteger *temp = Level1View.score;
//int theScore=2;
[labelChoose setText:[NSString stringWithFormat:@"You scored %i", theScore]];
}
有谁知道为什么我会收到这些错误,如果我正确编码?
答案 0 :(得分:2)
这里有一些问题。
主要问题是行setTheScore: theScore++
没有调用setter方法。它是带有标签的行(setTheScore:
),该行唯一的作用是直接递增变量theScore
(theScore++
)。
次要问题([self setTheScore:theScore++]
不起作用的原因)是,与您的说法相反,方法setTheScore:
似乎不存在,并且似乎没有{ Level1View的{1}}属性,至少在您向我们展示的代码中。
第三个问题是,即使行有效,假设theScore
方法设置了这个setTheScore:
变量,我认为你有未定义的行为(即使它被定义,它是非常令人困惑的,我是不确定假设是如何工作的)。 theScore
将theScore++
增加1,但它返回旧的未增加的theScore
值,然后将其传递给setter方法。因此,此行可能会使theScore
保持与之前相同的值,或者可以绕过设置器来增加分数。它可能取决于你的系统发生了什么。
另外,我不清楚theScore
是全局变量还是实例变量。你似乎在描述两者。作为实例的属性,全局变量没有意义。