2011-07-18 2 views
0

を破ります。 NSMuteableDictionaryに格納されたデータを使用してそれらを追加します。ここでこれを行うより良い方法はありますか?ループを使用したいが、それは私が6席のUIViewオブジェクトに最大6つのプレーヤーのオブジェクトを追加しています次のコードの塊を持って

は、それが現時点でどのように見えるかです:ループを使用してこのコードを合理化する方法は

MoneyCentralAppDelegate *delegate = (MoneyCentralAppDelegate *) [[UIApplication sharedApplication] delegate]; 

//add player1 
NSMutableDictionary *player1Dictionary = [[delegate appDataDictionary] valueForKey:@"Player1"]; 
Player *player1 = [[Player alloc] initWithFrame:CGRectMake(0,0,0,0)]; 
player1.playerName = [player1Dictionary [email protected]"PlayerName"]; 
player1.avatar = [UIImage imageNamed:[player1Dictionary valueForKey:@"Avatar"]]; 
[seat1 setAlpha:1]; 
[seat1 addSubView:player1]; 

//add player2 
NSMutableDictionary *player2Dictionary = [[delegate appDataDictionary] valueForKey:@"Player2"]; 
if ([player2Dictionary valueForKey:@"PlayerName"] != @"Enter your name") { 
Player *player2 = [[Player alloc] initWithFrame:CGRectMake(0,0,0,0)]; 
player2.playerName = [player2Dictionary [email protected]"PlayerName"]; 
player2.avatar = [UIImage imageNamed:[player2Dictionary valueForKey:@"Avatar"]]; 
[seat2 setAlpha:1]; 
[seat2 addSubView:player2]; 
} 

//And so on for another 4 more players... 

ありませんか?私は、次のことを試してみたが、それは動作しません:

for (int i=1; i=6, i++) { 
[self addPlayerToBoard:i]; 
} 

- (void) addPlayerToBoard:(int)playerNumber { 

MoneyCentralAppDelegate *delegate = (MoneyCentralAppDelegate *) [[UIApplication sharedApplication] delegate]; 
NSMutableDictionary *playerDictionary; 
NSString *thePlayer; 
Seat *seat; 

switch (playerNumber) { 
case 1: 
    thePlayer = @"Player1"; 
    seat = seat1; 
    break; 
case 2: 
    thePlayer = @"Player2"; 
    seat = seat2: 
    break; 
case 3: 
    //and so on to 6 
} 

playerDictionary = [[delegate appDataDictionary] valueForKey:thePlayer]; 
if ([playerDictionary valueForKey:@"PlayerName"] != @"Enter your name") { 
Player *newPlayer = [[Player alloc] initWithFrame:CGRectMake(0,0,0,0)]; 
newPlayer.playerName = [playerDictionary valueForKey:@"PlayerName"]; 
newPlayer.avatar = [UIImage imageName:[playerDictionary valueForKey:@"Avatar"]]; 
[seat setAlpha:1]; 
[seat addSubView:newPlayer]; 
} 
} 

を私の知る限り、このコードは良いですが見ることができるように。それはエラーや警告なしでコンパイルしますが、私は新しいゲームを開始しようとすると、そのコードを実行しようとするとアプリケーションが停止します。

また、PlayerName!= @ "Enter your name"の値が、毎回6人のプレイヤーで終わるので、どういうことでも、真に評価されるかどうかをチェックするifステートメントです。それはnsmutabledictionaryの文字列の値をチェックする間違った方法ですか?

これはたくさん見ていますが、ここでは何か助けや提案をいただければ幸いです。

ありがとうございます。

+1

タイトルを調整しました。うまくいけばそれは良いです。 – dutsnekcirf

答えて

2

問題は、あなたがループのためにあなたの作成した方法です。正しい構文はfor(initialize; test; update)です。 1〜6変数iを反復、あなたが使用する必要がありますするには:

for(int i = 1; i <= 6; i++) { 
    [self addPlayerToBoard:i]; 
} 

あなたがオブジェクト上!=または==演算子を使用するときは、オブジェクトのポインタを比較しています。つまり、2つのオブジェクトが同じオブジェクトであれば、2つのオブジェクトは同じオブジェクトになります。 2つのオブジェクトが同じかどうかを判断するには、[object1 isEqualTo:object2]を使用してください。オブジェクトがNSStringになることがわかっている場合は、より速くなるので、代わりに[string1 isEqualToString:string2]を使用する必要があります。

if (![[playerDictionary valueForKey:@"PlayerName"] isEqualToString:@"Enter your name"]) { 
    ... 
} 
+0

ありがとうございます! – dutsnekcirf

関連する問題