2013-03-12 4 views
0

В моей игре с соответствующими картами i'v создал метод IBAction для новой игры.Невозможно обновить UI

Теперь у меня есть метод, называемый updateUI, чтобы изменить состояние UI в соответствии с действиями.

updateUI В моем методе я есть внутримышечно, призывающую альфа угасать соответствующие карты, но когда я звоню метод newGame, Карты все еще исчезают от времени я назвал альфа ...

Это мой ViewController, Пожалуйста, скажите мне, что я делаю неправильно ... спасибо! :

#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 

Это cleanHistory метод:

-(void)cleanHistory { 

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

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

} 

ответ

1

Убедитесь, что все объекты присутствуют и не выпустили/autoreleased и/или убедитесь, что вы пополняете UI в основном потоке.

+0

Я использую ARC ... что вы подразумеваете под основной темой? @ arun.s – JohnBigs

+1

Ya ... bt убедитесь, что у вас есть объекты .. например, например, объекты cardbuttons в вашем массиве или нет?. Основной поток - это то, где происходит обновление UI. UI не будет обновляться при вызове из вторичного therad –

Смежные вопросы