如何在iOS-iPhone上的同一类的不同实例上给出名称

时间:2011-04-22 15:00:42

标签: iphone ios loops instance names

我正在开发一款iPhone应用程序,它有很多不同的卡片,每张卡片代表一辆汽车。因此,每张卡都有一些实例变量和一个图像。我的班级CarCard正在从.plist文件中加载每辆汽车的数据。我想在循环中创建许多实例,以便为每个实例指定不同的名称。 E.g:

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

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

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

3 个答案:

答案 0 :(得分: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"];

答案 1 :(得分: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];
}

像这样的东西。这有用吗?

答案 2 :(得分: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];