1

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

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

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

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

4

3 回答 3

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"];
于 2011-04-22T15:07:26.283 回答
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];
}

像这样的东西。这有帮助吗?

于 2011-04-22T15:07:23.473 回答
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];
于 2011-04-22T15:09:07.863 回答