この質問は、著者の意図を適切に伝えるために書き直されました
最終的に一定量の「チャレンジ」(正確には60)を通じて「プレーヤー」の量を追跡する方法になるMasterDetailアプリがあります。チャレンジはすべてのプレイヤーで同じですが、個々のチャレンジでの各プレイヤーのステータスは異なる場合があります。プレイヤーに関するすべてのデータは Postgres データベースに保存され、LeftViewController の JSONModel を使用して取得されます。DB からすべてのデータを正しく取得しており、NSMutableDictionary に正常に配置しました。Dictionary のデータは次のようになります (これは 1 人のプレーヤーです)。
player = (
{
id = 9;
name = "Arthur Dent";
currentChallenge = "Cooking";
timeStarted = "04 Jul 2013 1:08 PM";
challengesDone = (
{
challengeName = "Flying";
timeCompleted = "04 Jul 2013 12:08 PM";
}
);
nextChallenge = "Swimming";
freePass = (
Running,
"Climbing"
);
},
ご覧のように、プレイヤーには「完了」(「完了」) されたいくつかのチャレンジ、実行する必要のないチャレンジ (「パス」)、実行中のチャレンジ (「currentChallenge」)、およびプレイヤーが実行する 1 つのチャレンジがあります。次に実行します (「nextChallenge」)。プレイヤーが陥る可能性のあるこれらの状態ごとに、RightViewController にある「課題」を色分けして、何が起こっているかを一目で理解できるようにしたいと考えています。NSMutableDictionary にあるデータによって決定されるプレーヤーのステータスに基づいて、さまざまな色を点灯させる「チャレンジ」が必要です。
NSDictionary のデータから配列を作成することで、次のようにして色を変更できます。
if ([freePassArray containsObject:@"challenge three name"])
{
UIImage *image = [UIImage imageNamed:@"status_pass.png"]; //status_pass.png is my color
[challengeThreeImageView setImage:image];
}
しかし、このようにすると、240 個の if ステートメントと else if ステートメントを記述して、60 のチャレンジすべてで考えられるすべてのステータスをカバーする必要があります。
次のようにデータを渡すため、配列には選択したプレーヤーのデータのみが含まれます。
* LeftViewController.m * didSelectRowAtIndexPath
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
//Re-fetch the feed from the Postgres Database when a user selects an entry
[JSONHTTPClient getJSONFromURLWithString:@"http://myurl" completion:^(NSDictionary *json, JSONModelError *err) {
NSError* error = nil;
_feed = [[PostgresFeed alloc] initWithDictionary:json error:&error];
[[NSNotificationCenter defaultCenter] postNotificationName:@"myNotification" object:nil userInfo:[[json objectForKey:@"preclear"] objectAtIndex:indexPath.row]];
}];
Player *selectedPlayer = [_players objectAtIndex:indexPath.row];
if (_delegate)
{
[_delegate selectedPlayer:selectedPlayer];
}
}
そのため、一度にすべてのプレイヤーの画像が設定されることはありませんが、別のプレイヤーが選択された後も画像はクリアされません。
240 の if ステートメントと else if ステートメントを書かずに色を変更するにはどうすればよいですか? また、別のプレーヤーを選択したときに色をクリアするにはどうすればよいですか?