0

我在对象中存储了一些字符串并将对象添加到 NSMutableArray。现在我想打印数组每个元素中的字符串。显然,我做错了什么。我将回过头来回顾这些基础知识,但我希望有人能解释我如何打印字符串而不是看起来是元素地址的内容。

/** interface **/
@property (nonatomic, copy) NSString*myNumber;

-(void)setNumber: (NSString*) randomNumber;


/** implementation **/

@synthesize myNumber;

-(void) setNumber:(NSString *)randomNumber
{
    myNumber = randomNumber;    
} 

/**main**/

Fraction * aFrac = [[Fraction alloc] init];
[aFrac setNumber:@"5/6"];
Fraction * bFrac = [[Fraction alloc] init];
[bFrac setNumber:@"2/3"];

NSMutableArray * myArray = [[NSMutableArray alloc] init];
[myArray addObject:aFrac];
[myArray addObject:bFrac];

int i;
for(i = 0; i<2; ++i)
{
    id myArrayElement  = [myArray objectAtIndex:i];
    NSLog(@"%@", myArrayElement);
}

for(i = 0; i<2; ++i)
{
    NSLog(@"%@", myArray[i]);    
}

两个 for 循环都打印相同的内容。

4

3 回答 3

2

当您将自定义对象传递给 NSLog 时,您必须覆盖该对象中的 -(NSString)description 方法。

所以在你的 Fraction 类中,如果你像这样简单地覆盖这个函数

- (NSString*)description
{
  return self.myNumber;
}

那应该注销你想要的。

我可能会考虑在存储字符串时从 number 重命名该属性。

希望有帮助

于 2013-10-26T20:18:12.437 回答
1

我猜Fraction您创建的类型有一个名为 number 的 NSString 属性或方法(以匹配该-setNumber:方法),在这种情况下,您将使用以下代码来打印它:

NSLog("%@", [myArrayElement number]);

或者,对于第二个循环:

NSLog("%@", [myArray[i] number]);

于 2013-10-26T20:23:21.850 回答
0

在您的代码中,for 循环的含义仅相同,请尝试以下操作

 for(i = 0; i<2; ++i)
{
id myArrayElement  = [myArray objectAtIndex:i];
NSLog(@"%@", myArrayElement.number);
}

for(i = 0; i<2; ++i)
{
NSLog(@"%@", myArray[i].number);    
}

现在在这里您提取的两个数组值 [myArray objectAtIndex:i] 相当于 myArray[i]

于 2013-10-26T20:34:50.363 回答