2017-05-08 21 views
0

Characterクラスを継承するFriendオブジェクトとFoeオブジェクトに対して、このprintDetailsメソッドを定義しました。メインでNSMutableArray複数の属性を持つオブジェクトの配列の印刷

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

私は

NSLog(@"%@", characters); 

私の配列「の文字を」印刷しかし、私の出力は、メモリアドレスのシリーズのように見えるものとして出てきます。

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

オーバーライド ' - (NSStringの*)description'、および/または 'Character'のように、 – Larme

答えて

1

あなたのメインにはprintDetails関数を呼び出すことは決してないようです。結果はのメモリアドレスがの文字へのポインタで、NSArrayにあります。

は、最もエレガントなソリューションが、あなたの機能をテストするために、あなたは単に要素をループし、それぞれのprintDetailsを(呼び出しは、あなたの関数がCharacterクラスに対してローカルで付与することができます。

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

この出力すべき。。コンソールでの関数の結果

+0

Friend、Foe、CharacterにはすべてprintDetailsメソッドがあります。しかし、FriendとFoeのバージョンは、少し異なる属性を出力するため、Characterのバージョンを上書きする必要があります。私は仕事にあなたの提案を得ることができませんでした。私はそれが次のコードで動作するようになった。 int num = 1; (文字*文字の文字) { NSLog(@ "%d:"、num ++); [theCharacter printDetails]; } – Lee

+0

@Lee投稿したコードは、任意のカウンターを印刷する以外はまったく同じです。そして要素に型を割り当てると、私は速すぎます;)私は答えを更新しますが、整数表示は実際の解決策とは関係ありません。また、 'num'変数を配列の添え字アクセサーとして使用しないでください。Objective-Cはインデックスが付けられていて、最終要素に対してランタイム例外が発生することになります。 –

0

私は次のコードで動作するようにそれを得た

int num = 1; 
for (Character *theCharacter in characters) 
{ 
    NSLog (@"%d : ", num++); 
    [theCharacter printDetails]; 
} 
関連する問題