A friend and I are creating a card game for the iPhone, and in these early days of the project, I'm developing a Deck class and a Card class to keep up with the cards. I'm wanting to test the shuffle method of the Deck class, but I am not able to show the values of the cards in the Deck class instance. The Deck class has a NSArray of Card objects that have a method called displayCard that shows the value and suit using console output(printf or NSLog). In order to show what cards are in a Deck instance all at once, I am using this, [deck makeObjectsPerformSelector:@selector(displayCard)]
, where deck is the NSArray in the Deck class. Inside of the Deck class, nothing is displayed on the console output. But in a test file, it works just fine. Here's the test file that creates its own NSArray:
#import <Foundation/Foundation.h>
#import "card.h"
int main (int argc, char** argv)
{
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
Card* two = [[Card alloc] initValue:2 withSuit:'d'];
Card* three = [[Card alloc] initValue:3 withSuit:'h'];
Card* four = [[Card alloc] initValue:4 withSuit:'c'];
NSArray* deck = [NSArray arrayWithObjects:two,three,four,nil];
//Ok, what if we release the objects in the array before they're used?
//I don't think this will work...
[two release];
[three release];
[four release];
//Ok, it works... I wonder how...
//Hmm... how will this work?
[deck makeObjectsPerformSelector:@selector(displayCard)];
//Yay! It works fine!
[pool release];
return 0;
}
This worked beautifully, so I created an initializer around this idea, creating 52 card objects one at a time and adding them to the NSArray using deck = [deck arrayByAddingObject:newCard]
. Is the real problem with how I'm using makeObjectsPerformSelector or something before/after it?