Objective c NSMutableArray打印具有多个属性的对象数组
我已经为继承Character类的Friend和Foe对象定义了这个printDetails方法Objective c NSMutableArray打印具有多个属性的对象数组,objective-c,arrays,Objective C,Arrays,我已经为继承Character类的Friend和Foe对象定义了这个printDetails方法 -(void) printDetails { NSLog (@"\n%@: \nStrength is %ld \nIntelligence is %ld \nSpell is %@\n\n", self.name, self.strength, self.intelligence, self.spell); } 我主要打印数组字符 NSLog(@"%@", characters); 但是我
-(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>"
)
似乎您从未在主应用程序中调用printDetails函数。您看到的结果是指向NSArray中字符的指针的内存地址 这不是最优雅的解决方案,但要测试函数,您可以简单地在元素上循环并在每个元素上调用printDetails,只要您的函数是Character类的本地函数
-(void) printDetails
{
NSLog (@"\n%@: \nStrength is %ld \nIntelligence is %ld \nSpell is %@\n\n", self.name, self.strength, self.intelligence, self.spell);
}
这将在控制台中输出函数的结果。我使用以下代码获得了它
int num = 1;
for (Character *theCharacter in characters)
{
NSLog (@"%d : ", num++);
[theCharacter printDetails];
}
朋友、敌人和角色都有printDetails方法。但是Friend和Foe中的版本应该覆盖Character中的版本,因为它们打印的属性略有不同。我无法使你的建议生效。不过,我确实让它使用了以下代码。int num=1;对于Character*字符{NSLog@%d:,num++;[theCharacter printDetails];}@Lee,除了打印出任意计数器外,您刚才发布的代码完全相同。给元素分配一个类型,我在swift中呆的时间太长了;我将更新我的答案,但整数显示与实际解决方案无关。另外,不要尝试使用该num变量作为数组的下标访问器,Objective-C是0索引的,最终会在最后一个元素上出现运行时异常。Override-NSString*类Friend和Foe的描述,和/或字符。