JohnBigs
JohnBigs

Reputation: 2811

Can't update the UI

In my matching cards game, i'v created a IBAction method for a newGame.

Now, I have a method called updateUI to change the state of the UI according to the actions.

In my updateUI method I have a im calling alpha to fade away the matching cards, But when i'm calling the newGame method, The cards still fade away from the time i called the alpha...

This is my ViewController, Please tell me what i'm doing wrong..thanks! :

#import "CardGameViewController.h"
#import "PlayingCardsDeck.h"
#import "CardMatchingGame.h"


@interface CardGameViewController ()

@property (weak, nonatomic) IBOutlet UILabel *flipsLabel;
@property (weak, nonatomic) IBOutlet UILabel *notificationLabel;
@property (weak, nonatomic) IBOutlet UILabel *scoreCounter;
@property (strong, nonatomic) IBOutletCollection(UIButton) NSArray *cardButtons;

@property (strong, nonatomic) CardMatchingGame *game;
@property (nonatomic) int flipsCount;

@end


@implementation CardGameViewController

//creating the getter method that creates a new card game.
-(CardMatchingGame *) game {

    if (!_game) _game = [[CardMatchingGame alloc] initWithCardCount:self.cardButtons.count usingDeck:[[PlayingCardsDeck alloc] init]];
    return _game;
}

//creating a setter for the IBOutletCollection cardButtons
-(void) setCardButtons:(NSArray *)cardButtons {

    _cardButtons = cardButtons;
   [self updateUI];
}


//creating the setter for the flipCount property. Whick is setting the flipsLabel to the right text and adding the number of counts.
-(void) setFlipsCount:(int)flipsCount {

    _flipsCount = flipsCount;
    self.flipsLabel.text = [NSString stringWithFormat:@"Flips: %d", self.flipsCount];

}


-(void) updateUI {

    for (UIButton *cardButton in self.cardButtons) {
        Card *card = [self.game cardAtIndex:[self.cardButtons indexOfObject:cardButton]];
        [cardButton setTitle:card.contents forState:UIControlStateSelected];
        [cardButton setTitle:card.contents forState:UIControlStateSelected|UIControlStateDisabled];
        cardButton.selected = card.isFaceUp;
        cardButton.enabled = !card.unplayble;
        if (card.unplayble) {
            cardButton.alpha = 0.1;
        }
        self.scoreCounter.text = [NSString stringWithFormat:@"Score: %d", self.game.score];


        if (self.game.notification) {

        self.notificationLabel.text = self.game.notification;

        }
    }
}


//Here I created a method to flipCards when the card is selected, and give the user a random card from the deck each time he flips the card. After each flip i'm incrementing the flipCount setter by one.
- (IBAction)flipCard:(UIButton *)sender {

    [self.game flipCardAtIndex:[self.cardButtons indexOfObject:sender]];
    self.flipsCount++;
    [self updateUI];
}



- (IBAction)newGame:(UIButton *)sender {

    [self.game cleanHistory];

    self.flipsCount = 0;

    self.game = nil;

    [self updateUI];

}


@end

This is the cleanHistory method:

-(void)cleanHistory {

    for (Card *card in self.cards) {
        card.unplayble = NO;
        card.faceUp = NO;
    }

    self.notification = nil;
    self.score = 0;

}

Upvotes: 0

Views: 122

Answers (1)

arun.s
arun.s

Reputation: 1528

Make sure you have all the objects present and not released/autoreleased and/or make sure you are refreshing UI in your main thread.

Upvotes: 1

Related Questions