从NSMutableArray打印字符串对象

时间:2013-10-26 20:12:22

标签: objective-c

我在对象中存储了一些字符串,并将对象添加到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循环打印相同的东西。

3 个答案:

答案 0 :(得分:2)

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

所以在你的Fraction类中,如果你只是像这样覆盖这个函数

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

应该注明你想要的东西。

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

希望有所帮助

答案 1 :(得分:1)

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

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

或者,对于第二个循环:

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

答案 2 :(得分:0)

在你的代码中,for loop含义只有两个相同,请尝试下面的

 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]