Как добавить значение при нажатии кнопки - PullRequest
0 голосов
/ 27 марта 2011

В прошлый раз я спрашивал, как добавить значение при нажатии кнопки в методе

-(IBAction)addTap:(id)sender;

теперь меня научили использовать tapCount++; (tapCount - переменная типа int) для добавления 1 при каждом нажатии кнопки.

Однако я обнаружил, что значение не менялось, независимо от того, сколько раз я его нажимал.

Я хочу сделать tapCount равным 1, если я нажму кнопку один раз, и сделать его равным 2, если я нажму кнопку дважды, и т. Д.

Может кто-нибудь сказать мне, как это сделать?

Detail:

Допустим, у меня есть класс с именем Player, член с именем int tapCount и int result

при каждом нажатии кнопки значение будет добавлено в tapCount, и значение будет отображаться в конце (когда, скажем, в конце игры)

На данный момент значение остается неизменным, когда я использую NSLog для проверки.

Player.h

@class TappingViewController;

@interface Player : NSObject {

    NSString *name;
    int tapCount;
    int result;

}

@property (nonatomic, assign) NSString *name;
@property (nonatomic, assign) int tapCount;
@property (nonatomic, assign) int result;

@end

TappingViewController.h

@interface TappingViewController : UIViewController {

}

-(IBAction)addTap:(id)sender;

@end

TappIngViewController.m

 #import "TappingViewController.h"
  #import "Player.h"

@class Player;

int tapCount;

@implementation TappingViewController


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {

    }
    return self;
}

/*
- (void)loadView {
}
*/

- (void)viewDidLoad 

{

    Player *aPlayer = [[Player alloc]init];

    NSLog(@"tapCount:%d", aPlayer.tapCount);



    [super viewDidLoad];
}

-(IBAction)addTap:(id)sender;
{


    NSLog(@"BeforeL %d", tapCount);
   tapCount++;
    NSLog(@"After: %d", tapCount);



}
/*
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
*/

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

- (void)viewDidUnload {
}


- (void)dealloc {
    [super dealloc];
}

@end

Ответы [ 3 ]

0 голосов
/ 27 марта 2011

Я действительно не чувствую, что вы предоставляете достаточно информации, чтобы мы могли рассказать вам, что происходит не так.При этом, возможно, я смогу указать вам правильное направление.

Прежде всего, я бы посоветовал вам попробовать следующий код:

-(IBAction)addTap:(id)sender {
    NSLog(@"Before: %d", tapCount);
    tapCount++;
    NSLog(@"After: %d", tapCount);
}

Я добавил их оба просточтобы показать вам, что увеличение переменной действительно работает.

Если вы получаете вывод, который выглядит следующим образом:

Before: 0
After: 1
Before: 0
After: 1
Before: 0
After: 1

Это означает, что вы устанавливаете tapCount = 0; снова и снова.

Если вы не получаете никакого вывода, это означает, что ваш IBAction не подключен должным образом.

Если вы получаете ожидаемый вывод, но он тот же, когда вы «NSLog проверить это».Это означает, что вы случайно снова запустили tapCount = 0;.

Другая возможность - что-то не так с вашим NSLog.

Если у вас есть какие-либо вопросы, не стесняйтесь задавать.

0 голосов
/ 27 марта 2011

В методе addTap: вы ссылаетесь на tapCount TappingViewController, который отличается от tapCount игрока, даже если они имеют одно и то же имя, они разные. Поэтому вам нужно сослаться на свойство aPlayer tapCount:

aPlayer.tapCount++;

Однако aPlayer не входит в область действия addTap: метода. Единственное место, на которое вы в данный момент можете сослаться aPlayer, - метод viewDidLoad.

Это то, что вам нужно изменить: (вам не нужны комментарии, которые я добавил, чтобы указать на изменения)

TappingViewController.h

@class Player; //**You have imported the Player class in the .m file so if you use the Player class in the header you need to add it as a forward class.
@interface TappingViewController : UIViewController {
    Player *aPlayer; //**This is an instance variable (ivar) so you can access it in any method in the implementation (.m file), however you still need to put something in this ivar (see viewDidLoad)**
}
//**You can add a property for aPlayer if you want, but remember to do the memory management properly**    
-(IBAction)addTap:(id)sender;

@end

TappIngViewController.m

#import "TappingViewController.h"
#import "Player.h"

//**Get rid of the forward class, as you have imported it above**

//**Get rid of the tapCount that was were**

@implementation TappingViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {

    }
    return self;
}

/*
- (void)loadView {
}
*/

- (void)viewDidLoad 

{

    aPlayer = [[Player alloc] init]; //**remove the declaration of a new var**

    NSLog(@"tapCount:%d", aPlayer.tapCount);

    [super viewDidLoad];
}

-(IBAction)addTap:(id)sender;
{

    NSLog(@"BeforeL %d", tapCount);
   aPlayer.tapCount++; //**reference the player's tapCount**
    NSLog(@"After: %d", tapCount);



}
/*
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
*/

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

- (void)viewDidUnload {
}


- (void)dealloc {
    [super dealloc];
}

@end
0 голосов
/ 27 марта 2011

Я предполагаю, что IBAction находится в вашем контроллере. Вам нужно будет добавить переменную в ваш заголовок. В контроллере например:

Учитывая, что у вас есть счетчик ответвлений в другом классе, вашему контроллеру необходим указатель на этот класс.

// controller header file
Player *myPlayer;

// controller implementation file
-(void)awakeFromNib {
    myPlayer = [Player alloc] init];  // initialized the player
    // do whatever else you need to do
    // load previous data from NSUserDefaults, maybe
}

-(IBAction)addTap:(id)sender {
    myPlayer.tapCount++;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...