2009-08-18 22 views
1

Ich versuche zur Zeit zu füllen und NSMutableArray mit etwas wie folgt aus:Frage zum NSMutableArray

deck = [[NSMutableArray alloc] initWithCapacity:52]; 
for (int suit = 0; suit <= 3; suit++) { 
    for (int value = 1; value <= 13; value++) { 
    ANormalCard *card = [[ANormalCard alloc] initWithSuit:suit value:value]; 
    [deck addObject:card]; 
    [card autorelease]; 
    } 
} 

Nun das Problem ist, wenn ich über das Feld gehen, nur das letzte Objekt I erstellen 52x im Array. Irgendeine Idee, was ich falsch mache?


Edit:

die -initWithSuit wie folgt aussieht:

- (id) initWithSuit:(int)suit value:(int)val { 
    if ((self = [super init])) { 
     theSuit = suit; 
     theValue = val; 
    } 
    return self; 
} 

Ich NSEnumerator * enumerator = [deck objectEnumerator]; und eine while-Schleife mit dem Array iterieren.

+0

Stellen Sie sicher, dass initWithSuit: value: nicht immer das gleiche Objekt zurückgibt. – cocoafan

+0

I don ' Ich denke, ich habe die Frage verstanden - was ist das Problem mit dem letzten Objekt? –

+2

Dieser Code sieht gut aus.Wie unterscheidet sich Ihr tatsächlicher Code? Und können Sie den Code für initWithSuit: Wert:? – grahamparks

Antwort

2

Dieses Code-Snippet sieht einwandfrei aus. Das Problem liegt wahrscheinlich in Ihrer -initWithSuit:value: Methode - ich würde prüfen, ob Sie versehentlich die Karten falsch initialisieren.


Edit: Die init-Methode nur durch die Fragesteller geschrieben und gut aussieht. Was ist die genaue Ausgabe, die Sie sehen, die Sie glauben lässt, dass nur das letzte Objekt 52 Mal hinzugefügt wurde? Wie genau untersuchen Sie das Array? (Ihr Kommentar besagt, dass Sie einen NSEnumerator verwenden, aber können Sie Ihre Frage so bearbeiten, dass sie das für Sie verwendete Snippet enthält?

+0

der -initWithSuit sieht so aus: - (id) initWithSuit: (int) suit value: (int) val { if ((self = [su per init])) { theSuit = Anzug; theValue = val; } Rückkehr selbst; } – eemceebee

+0

Ich habe es zu Ihrer Frage hinzugefügt. –