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