2011-04-22 70 views
1

我正在开发一款iPhone应用程序,它有许多不同的卡,每个卡都代表一辆汽车。所以,每张卡都有一些实例变量和一个图像。我的班级CarCard正在从.plist文件加载每辆车的数据。我想在循环中创建多个实例,以便为每个实例提供不同的名称。例如:如何在iOS上的同一类的不同实例上提供名称 - iPhone

CarCard *car1 = [[CarCard alloc] initWithSomeINfo: info]; 
....... *car2 ..........................................; 

....... *carN ..........................................; 

其中N是Cars的数量。问题是我不知道每次N是多少。所以我必须在循环中创建实例,但是我找不到如何给实例赋予不同的名称。

回答

2

NSMutableArrayCarCard对象是一个更好的方法去。中实例化你的循环之外:

NSMutableArray *cardArray = [[NSMutableArray alloc] init]; 

那么你的循环内您需要添加对象:

[cardArray addObject:car]; 

现在,您可以通过其索引访问它们:

// Card 9, numbering starts at 0 
myCar = [cardArray objectAtIndex:8]; 

编辑添加

如果你想通过他们的名字而不是他们在阵列中的位置来引用这些卡,并且名称将是唯一的,你可以使用字典并按名称引用这些卡。实例字典中的循环之外:

NSMutableDictionary *cardDictionary = [[NSMutableDictionary alloc] init]; 

然后在循环中,你会增加你的对象:

[cardDictionary setObject:car forKey:cardName]; 

现在,你可以通过自己的名字访问它们:

// Card with the key named "card9" 
myCar = [cardDictionary objectForKey:@"card9"]; 

// Card with the key named "monkey" 
myCar = [cardDictionary objectForKey:@"monkey"]; 
+0

谢谢你的回答。问题是我将使用这些卡片进行多人游戏。所以我想发送给他另一名玩家他将在他的套牌中拥有的牌名以及OPPONENTS牌的名字,以便提供他需要制作2套牌(洗牌后)的信息。然后,两个玩家应该比较他们的牌的属性,因此,如果每个实例具有唯一的名称,以便通过互联网仅发送卡实例名而不是孔卡实例将是有用的。有关于此的任何想法? – 2011-04-22 15:36:14

+0

虽然,中央甲板的想法仍然持有,玩家可以从中获得自己的卡牌吗?因此,您将阵型构建为一个阵列,然后处理/拆分牌,创建由他们在牌组中的位置识别的牌的牌,以及您也存储在主牌中的牌名。您可以向玩家发送主阵列中的卡牌名称和索引,当他们玩卡时,他们只需向索引发送索引。我会在我的答案中增加一个可能对你更好的方法,使用'NSMutableDictionary'。 – 2011-04-22 16:49:20

0

为什么不创建CarCard实例并将它们简单地添加到数组中?如果你知道N是什么,那么你的循环非常简单:

NSMutableArray *carCards = [[NSMutableArray alloc] initWithCapacity:N]; 
for(int i=0; i<N; i++) { 
    NSDictionary *car = [NSDictionary dictionaryWithContentsOfFile:<plist-i>]; 
    CarCard *carCard = [[[CarCard alloc] initWithSomeInfo:car] autorelease]; 
    [carCards addObject:carCard]; 
} 

就像这样。这有帮助吗?

0

你可以创建一个NSMutableDictionary并填充它。假设你已经知道(从plist中),你需要多少价值创造,你可以写这样的事情:

for (int count = 1; count <= totalCars; count++) 
    [carDict setObject:[[CarCard alloc] initWithSomeInfo:info] forKey:[NSString stringWithFormat:@"car%d", count]]; 

然后,你可以得到任何编号的对象:

CarCard someCard = [carDict objectForKey:[NSString stringWithFormat:@"car%d", selectedNumber]]; 

或者,您也可以使用NSDictionary的allValues方法得到一组数值:

NSArray *allCards = [carDict allValues]; 
相关问题