2013-07-06 61 views
-3

可以说我创建了一些名为Rectangle的类。我创建了一个可变数组(称为allRectangles),并添加四种不同的矩形的数组:获取实例名称作为NSString

例如:

Rectangle *rect1 = [[Rectangle alloc] init]; 
[allRectangles addObject: rect1]; 

...重复RECT2,rect3和rect4

如果我通过迭代阵列使用 for (Rectangle *rect in allRectangles),我只是想输出的每一个名字,我该怎么办呢?例如,如果我这样做:

NSLog(@"%@", rect) 

它将打印类名称和内存地址。我想要它打印rect1然后rect2等...请帮助?

+4

添加名称变量Rectangle类? – juniperi

+1

编译代码后,原来的变量名称会丢失。最好的办法是按照juniperi的建议给你的Rectangle类一个'name'属性。要么是这样,要么将矩形存储在字典中使用键来标识它们(尽管这种方法失去了对象的顺序,但可以使用商店的组合)。 – dreamlax

回答

4

在您的代码段中的对象没有名字,至少不至于你已经证明。也就是说,Rectangle类似乎并不具有name财产或类似的东西。

我怀疑你混淆的变量名称(例如rect1)与对象的名称。它们不是同一件事。 rect1是一个指针变量,它指向一个对象(Rectangle类的一个实例),但实际上并不影响的对象。一个对象可能会在其生命周期中被许多不同的变量指向,但这并不意味着这些变量中的任何一个的名称都是该对象的名称。 (请注意,在你的for-in循环中,每个对象都是由变量rect指向的。你是否期望这个事实导致对象被命名为“rect”?)

如果你想要一个对象有一个名字像“rect1”,那么你需要添加一个name属性到类中,并在你创建的每个对象上设置该属性。

0

为什么不将元素存储在NSDictionary而不是NSArray中,并通过变量的名称检索它们?

NSMutableDictionary *dict = [NSMutableDictionary new] ; 

Rectangle *rect1 = [[Rectangle alloc] init]; 
[dict setObject:rect1 forKey:@"rect1"]; 


for (NSString *key in [dict allKeys]) { 
    NSLog(@"%@ => %@", key, [dict objectForKey:key]); 
} 
0

局部变量名是源代码的信息,它不会在你运行的代码存在,它甚至使多大意义是什么在以下

Rectangle * rect1 = [[Rectangle alloc] init]; 
Rectangle * rect2 = rect1; 

Rect1的的“矩形名称”或rect2

如果你想让你的矩形有一个名字,你必须给它们一个名称属性,并在创建每个矩形时进行设置。