Самым основным решением для этого будет хранить игроков в любом массиве или словаре (шпонкой на имя игрока). Принимая подход массива:
// assume we have an NSArray property, players
NSMutableArray *tempPlayers = [NSMutableArray arrayWithCapacity:[playerNames count]];
for (NSString *name in playerNames) {
Player *player = [[Player alloc] init];
[tempPlayers addObject:player];
[player release];
}
self.players = tempPlayers;
Теперь Вы можете получить доступ к каждому игроку от players
собственности по телефону objectAtIndex:
.
Слово о дизайне - во-первых, считаете ли вы, что добавьте name
свой класс Player
? Это кажется естественным местом для хранения этой информации после ее захвата. Например:
for (NSString *name in playerNames) {
// you might also have a designated initializer
// e.g. [[Player alloc] initWithName:name]
Player *player = [[Player alloc] init];
player.name = name;
[tempPlayers addObject:player];
[player release];
}
В целом это самое простое, что работает, и все, что я делаю сейчас. Однако в будущем ...
В какой-то момент вы можете представить себе какой-то класс Game
, который представляет каждую новую игру, которую создает ваш пользователь. Это было бы естественное место для хранения вашего массива игроков и позволит вам создать более сплоченный интерфейс, например:
Game *newGame = [[Game alloc] init];
for(NSString *name) in playerNames) {
[newGame addPlayerNamed:name];
}
Вашего Game
класс должен инкапсулировать массив игроков и метод addPlayerNamed
бы инкапсулировать процесс создания нового Player
и сохранения его в этом массиве, что делает ваш код контроллера намного проще (и проявляет намерение) в этом процессе.
Другим преимуществом этого является то, что он дает вам возможность получить доступ к этим данным во всем приложении, а не привязывать его к этому конкретному контроллеру. Вы можете реализовать какой-то однопользовательский доступ к «currentGame». Не настоящий одноточечно конечно, но что-то, как это будет хорошо работать:
Game *newGame = [[Game alloc init];
.. // configure game as above
[Game setCurrentGame:newGame];
Так что теперь, когда вам нужен доступ к текущей игре (или игрока) информация:
// in some other controller
Game *currentGame = [Game currentGame];
for(Player *player in currentGame.players) {
// etc...
}