Как дать имя на разных экземплярах одного и того же класса на iOS - iPhone - PullRequest
1 голос
/ 22 апреля 2011

Я занимаюсь разработкой приложения для iPhone, в котором много разных карт, каждая из которых представляет собой автомобиль.Итак, каждая карта имеет несколько переменных экземпляра и одно изображение.Мой класс CarCard загружает данные для каждого автомобиля из файла .plist.Я хочу сделать много экземпляров в цикле, чтобы дать разные имена каждому экземпляру.Например:

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

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

, где N - количество автомобилей.Проблема в том, что я не знаю, что такое число N каждый раз.Поэтому я должен сделать экземпляры в цикле, но я не смог найти, как дать разные имена экземплярам.

Ответы [ 3 ]

2 голосов
/ 22 апреля 2011

NSMutableArray из CarCard объектов - гораздо лучший путь. Создайте его вне вашей петли:

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

тогда внутри вашего цикла вы добавите свои объекты:

[cardArray addObject:car];

Теперь вы можете получить к ним доступ по их индексам:

* * 1010

Отредактировано, чтобы добавить

Если вы хотите ссылаться на карточки по имени, а не по положению в массиве, а имена будут уникальными, вы можете использовать словарь и ссылаться на карточки по имени. Создание словаря вне цикла:

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 голосов
/ 22 апреля 2011

Вы можете создать 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];
0 голосов
/ 22 апреля 2011

Почему бы не создать экземпляры 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];
}

Примерно так.Это полезно?

...