このための最も基本的な解決策は、配列または(選手名をキー)辞書のいずれかでプレイヤーを保存することです。配列のアプローチを取る:
// 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;
あなたは今objectAtIndex:
を呼び出すことでplayers
プロパティから各プレイヤーにアクセスすることができます。
あなたのPlayer
クラスにname
プロパティを追加することを検討しましたか?これはあなたがそれを撮影した後にこの情報を保存する自然な場所のようです。例:
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
クラスは選手のアレイとプロセスをカプセル化しますaddPlayerNamed
方法をカプセル化します
Game *newGame = [[Game alloc] init];
for(NSString *name) in playerNames) {
[newGame addPlayerNamed:name];
}
新しいPlayer
を作成し、それをその配列に格納することで、コントローラコードをプロセス内ではるかに簡単に(そして意図を明らかにするように)作ることができます。
この特典のもう1つの利点は、この特定のコントローラーに縛られるのではなく、アプリ全体でこのデータにアクセスできる方法を提供することです。あなたは "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...
}