实现功能:设置了一个按钮,鼠标点击,随机显示一副扑克牌的一张牌
目前问题:点击后没有显示。
问题应该是下面我标注了红色的两行代码,还请帮忙,感谢!#import "PlayingCardDeck.h"
#import "Deck.h"@interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel *flipsLabel;
@property (nonatomic) NSInteger flipCount;
@property (strong,nonatomic) Deck *deck;@end@implementation ViewController
- (Deck *)deck
{
    if (!_deck) {
        _deck = [self createDeck];
    }
    return _deck;
}- (Deck *)createDeck
{
    return [[PlayingCardDeck alloc] init];
}- (IBAction)touchCardButton:(UIButton *)sender {
    
    //UIImage *cardImage = [UIImage imageNamed:@"cardback"];
    if ([sender.currentTitle length]) {
        [sender setBackgroundImage:[UIImage imageNamed:@"cardback"]
                          forState:UIControlStateNormal];
        [sender setTitle:@"" forState:UIControlStateNormal];
    }else
    {
        Card *randomCard = [self.deck drawRandomCard];。// 该行存在问题,不知道什么原因
       
        [sender setBackgroundImage:[UIImage imageNamed:@"cardfront"]
                          forState:UIControlStateNormal];
        [sender setTitle:randomCard.contents forState:UIControlStateNormal];
    }
    self.flipCount++;
}
PlayingCardDeck.m:
#import "PlayingCardDeck.h"
#import "PlayingCard.h"@implementation PlayingCardDeck- (instancetype)init
{
    self = [super init];
    if (self) {
        for (NSString *suit in [PlayingCard validSuits]) {
            for (NSUInteger rank = 1; rank <= [PlayingCard maxRank]; rank++) {
                PlayingCard *card = [[PlayingCard alloc] init];
                card.rank = rank;
                card.suit = suit;
            }
        }
    }
    return self;
}@end#import "Deck.h"
@interface Deck()
@property (strong,nonatomic) NSMutableArray *cards;
@end
 Deck.m:- (NSMutableArray *)cards
{
    if (!_cards) _cards = [[NSMutableArray alloc] init];
    return _cards;
}- (Card *)drawRandomCard
{
    Card *randomCard = nil;
    if ([self.cards count]) {                                                          //好像就是这里存在问题:self.cards count 一直是0,正常这里应该是一幅扑克牌的52张牌,不知道原因
        unsigned index = arc4random() % [self.cards count];
        randomCard = self.cards[index];
        [self.cards removeObjectAtIndex:index];
    }   
    return randomCard;
}
完整代码如下:
//
//  Card.h
//  CardGame
//
//  Created by jianghao on 2017/4/16.
//  Copyright 2017年 jianghao. All rights reserved.
//#import <Foundation/Foundation.h>@interface Card : NSObject@property (strong,nonatomic) NSString *contents;
@property (nonatomic) BOOL chosen;
@property (nonatomic) BOOL matched;- (NSInteger) match:(NSArray *)otherCard;@end
//
//  Card.m
//  CardGame
//
//  Created by jianghao on 2017/4/16.
//  Copyright  2017年 jianghao. All rights reserved.
//#import "Card.h"@implementation Card- (NSInteger) match:(NSArray *)otherCard
{
    int score = 0;
    for (Card *card in otherCard) {
        if ([card.contents isEqualToString:self.contents]) {
            score = 1;
        }
    }
    return score;
}@end
//
//  PlayingCard.h
//  CardGame
//
//  Created by jianghao on 2017/4/17.
//  Copyright  2017年 jianghao. All rights reserved.
//#import <Foundation/Foundation.h>
#import "Card.h"@interface PlayingCard : Card@property (strong,nonatomic) NSString *suit;
@property (nonatomic) NSUInteger rank;+ (NSArray *)validSuits;
+ (NSUInteger)maxRank;@end
//
//  PlayingCard.m
//  CardGame
//
//  Created by jianghao on 2017/4/17.
//  Copyright 2017年 jianghao. All rights reserved.
//#import "PlayingCard.h"@implementation PlayingCard- (NSString *) contents
{
    NSArray *rankStrings = [PlayingCard rankStrings];
    return [rankStrings[self.rank] stringByAppendingString:self.suit];
}@synthesize suit = _suit;+ (NSArray *)validSuits
{
    return @[@"",@"",@"",@""] ; //黑红梅方
}- (void)setSuit:(NSString *)suit
{
    if ([[PlayingCard validSuits] containsObject:suit]) {
        _suit = suit;
    }
}- (NSString *)suit
{
    return _suit ? _suit : @"?";
}+ (NSArray *)rankStrings
{
    return @[@"?",@"A",@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10",@"J",@"Q",@"K",@"A"];
}
+ (NSUInteger)maxRank
{
    return [[self rankStrings] count] -1;
}- (void)setRank:(NSUInteger)rank
{
    if (_rank <= [PlayingCard maxRank]) {
        _rank = rank;
    }
}
//
//  Deck.h
//  CardGame
//
//  Created by jianghao on 2017/4/17.
//  Copyright 2017年 jianghao. All rights reserved.
//#import <Foundation/Foundation.h>
#import "Card.h"
//#import "PlayingCard.h"@interface Deck : NSObject- (void)addCard:(Card *)card atTop:(BOOL)atTop;
- (void)addCard:(Card *)card;-(Card *)drawRandomCard;@end//
//  Deck.m
//  CardGame
//
//  Created by jianghao on 2017/4/17.
//  Copyright  2017年 jianghao. All rights reserved.
//#import "Deck.h"
@interface Deck()
@property (strong,nonatomic) NSMutableArray *cards;
@end
@implementation Deck- (NSMutableArray *)cards
{
    if (!_cards) _cards = [[NSMutableArray alloc] init];
    return _cards;
}- (void)addCard:(Card *)card atTop:(BOOL)atTop
{
    if (atTop) {
        [self.cards insertObject:card atIndex:0];
    }
    else{
        [self.cards addObject:card];
    }
}- (void)addCard:(Card *)card
{
    [self addCard:card atTop:NO];
}- (Card *)drawRandomCard
{
    Card *randomCard = nil;
    if ([self.cards count]) {
        unsigned index = arc4random() % [self.cards count];
        randomCard = self.cards[index];
        [self.cards removeObjectAtIndex:index];
    }
    else
        NSLog(@"报错");
   
    return randomCard;
}@end
//
//  PlayingCardDeck.h
//  CardGame
//
//  Created by jianghao on 2017/4/19.
//  Copyright  2017年 jianghao. All rights reserved.
//#import <Foundation/Foundation.h>
#import "Deck.h"@interface PlayingCardDeck : Deck@end
//
//  PlayingCardDeck.m
//  CardGame
//
//  Created by jianghao on 2017/4/19.
//  Copyright  2017年 jianghao. All rights reserved.
//#import "PlayingCardDeck.h"
#import "PlayingCard.h"@implementation PlayingCardDeck- (instancetype)init
{
    self = [super init];
    if (self) {
        for (NSString *suit in [PlayingCard validSuits]) {
            for (NSUInteger rank = 1; rank <= [PlayingCard maxRank]; rank++) {
                PlayingCard *card = [[PlayingCard alloc] init];
                card.rank = rank;
                card.suit = suit;
            }
        }
    }
    return self;
}@end
#import "ViewController.h"
#import "PlayingCardDeck.h"
#import "Deck.h"@interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel *flipsLabel;
@property (nonatomic) NSInteger flipCount;
@property (strong,nonatomic) Deck *deck;@end@implementation ViewController
- (Deck *)deck
{
    if (!_deck) {
        _deck = [self createDeck];
    }
    return _deck;
}- (Deck *)createDeck
{
    return [[PlayingCardDeck alloc] init];
}- (void)setFlipCount:(NSInteger)flipCount
{
    _flipCount = flipCount;
    self.flipsLabel.text = [NSString stringWithFormat:@"Flips:%ld",self.flipCount];
    //NSLog(@"flipCount = %d",self.flipCount);
}- (IBAction)touchCardButton:(UIButton *)sender {
    
    //UIImage *cardImage = [UIImage imageNamed:@"cardback"];
    if ([sender.currentTitle length]) {
        [sender setBackgroundImage:[UIImage imageNamed:@"cardback"]
                          forState:UIControlStateNormal];
        [sender setTitle:@"" forState:UIControlStateNormal];
    }else
    {
        Card *randomCard = [self.deck drawRandomCard];
       
        [sender setBackgroundImage:[UIImage imageNamed:@"cardfront"]
                          forState:UIControlStateNormal];
        [sender setTitle:randomCard.contents forState:UIControlStateNormal];
    }
    self.flipCount++;
}
@end