objective-c新手 - 需要帮助全局变量和setter方法

时间:2010-12-24 22:03:06

标签: iphone objective-c

我正在创建一个有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]];

}

有谁知道为什么我会收到这些错误,如果我正确编码?

1 个答案:

答案 0 :(得分:2)

这里有一些问题。

主要问题是行setTheScore: theScore++没有调用setter方法。它是带有标签的行(setTheScore:),该行唯一的作用是直接递增变量theScoretheScore++)。

次要问题([self setTheScore:theScore++]不起作用的原因)是,与您的说法相反,方法setTheScore:似乎不存在,并且似乎没有{ Level1View的{1}}属性,至少在您向我们展示的代码中。

第三个问题是,即使行有效,假设theScore方法设置了这个setTheScore:变量,我认为你有未定义的行为(即使它被定义,它是非常令人困惑的,我是不确定假设是如何工作的)。 theScoretheScore++增加1,但它返回旧的未增加的theScore值,然后将其传递给setter方法。因此,此行可能会使theScore保持与之前相同的值,或者可以绕过设置器来增加分数。它可能取决于你的系统发生了什么。

另外,我不清楚theScore是全局变量还是实例变量。你似乎在描述两者。作为实例的属性,全局变量没有意义。