2017-05-08 4 views
0

Ich habe diese printDetails-Methode für die Friend- und Foe-Objekte definiert, die die Character-Klasse erben.NSMutableArray Array mit Objekten mit mehreren Attributen drucken

-(void) printDetails 
{ 
NSLog (@"\n%@: \nStrength is %ld \nIntelligence is %ld \nSpell is %@\n\n", self.name, self.strength, self.intelligence, self.spell); 
} 

In Haupt drucke ich meine Array „Zeichen“

NSLog(@"%@", characters); 

Aber meine Ausgabe kommt aus wie das, was wie eine Reihe von Speicheradressen aussieht.

(
"<Friend: 0x100204aa0>", 
"<Friend: 0x100600320>", 
"<Friend: 0x100600170>", 
"<Foe: 0x100500330>", 
"<Foe: 0x100205b50>", 
"<Foe: 0x100102270>" 
) 
+0

Aufschalten '- (NSString *) Beschreibung 'der Klasse' Freund' und 'Feind' und/oder' Charakter'. – Larme

Antwort

1

Es scheint, dass Sie nie in Ihrem Haupt Ihre printDetails Funktion aufrufen. Das Ergebnis, das Sie sehen, sind die Speicheradressen der Zeiger auf die Zeichen in NSArray.

nicht die eleganteste Lösung, aber Ihre Funktion zu testen, können Sie einfach Schleife über die Elemente und rufen printDetails auf jeder (gewährt Ihre Funktion zum Character Klasse lokal ist.

for (Character *character in characters) { 
    [character printDetails]; 
} 

Dies sollte Ausgabe der .. Ergebnis Ihrer Funktion in der Konsole

+0

Freund, Feind und Charakter haben alle die printDetails-Methode. Aber die Version in Friend and Foe sollte die in Character überschreiben, da sie leicht unterschiedliche Attribute drucken. Ich konnte Ihren Vorschlag nicht zur Arbeit bringen. Ich habe es jedoch mit dem folgenden Code arbeiten lassen. int num = 1; für (Zeichen * das Zeichen in Zeichen) { NSLog (@ "% d:", num ++); [theCharacter printDetails]; } – Lee

+0

@Lee Der Code, den Sie gerade gepostet haben, ist genau derselbe, mit Ausnahme des Ausdruckens eines beliebigen Zählers. Und wenn ich dem Element einen Typ zugewiesen habe, bin ich zu schnell gewesen;) Ich werde meine Antwort aktualisieren, aber die Integer-Anzeige hat nichts mit der tatsächlichen Lösung zu tun. Versuchen Sie auch nicht, diese 'num'-Variable als tiefgestellten Accessor zu Ihrem Array zu verwenden, Objective-C ist 0-indiziert und Sie würden am Ende eine Laufzeit-Ausnahme für das letzte Element bekommen. –

0

ich habe es mit dem folgenden Code zu arbeiten

int num = 1; 
for (Character *theCharacter in characters) 
{ 
    NSLog (@"%d : ", num++); 
    [theCharacter printDetails]; 
} 
Verwandte Themen