Есть ли более простой способ сделать что-то подобное? - PullRequest
1 голос
/ 11 февраля 2012

как у Q

У меня есть этот код

K1player1D.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"K1scoredLabel1"];
K1player1L.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"K1scorelLabel1"];
K1player1K.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"K1scorekLabel1"];
K1player1Q.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"K1scoreqLabel1"];
K1player1T.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"K1scoretLabel1"];

в viewDidLoad, для четырех игроков, поэтому его 16 меток. есть ли более короткий способ / код, чтобы сделать это?

Ответы [ 3 ]

0 голосов
/ 11 февраля 2012

EDIT

Я бы поместил их в NSDictionary

NSDictionary * playerDict = [NSDictionary dictionaryWithObjectsAndKeys:
                                     K1player1D,@"K1scoredLabel1",
                                     K1player1L,@"K1scorelLabel1",
                                     K1player1K,@"K1scorekLabel1",
                                     K1player1Q,@"K1scoreqLabel1",
                                     K1player1T,@"K1scoretLabel1",nil];

for(NSString * key in [playerDict allKeys]){
    PlayerObject * player = [playerDict objectForKey:key];
    player.text = [[NSUserDefaults standardUserDefaults] objectForKey:key];
}
0 голосов
/ 11 февраля 2012

Есть еще один способ сделать это, используя ответ Джоэлса в сочетании с KVC (кодирование значения ключа).Я не знаю, является ли это особенно хорошим подходом, но я включил его для полноты:

NSDictionary * playerDict = [NSDictionary dictionaryWithObjectsAndKeys:
                                 @"K1player1D",@"K1scoredLabel1",
                                 @"K1player1L",@"K1scorelLabel1",
                                 @"K1player1K",@"K1scorekLabel1",
                                 @"K1player1Q",@"K1scoreqLabel1",
                                 @"K1player1T",@"K1scoretLabel1",nil];

for(NSString * key in [playerDict allKeys]){
    NSString *labelName = [playerDict objectForKey:key];
    UILabel *label = [self valueForKey:labelName]; // grab the correct label using KVC
    label.text = [[NSUserDefaults standardUserDefaults] objectForKey:key];
}

Это может быть упрощено, если имена меток соответствуют ключам в NSUserDefaults (тогдаВы можете просто использовать массив имен вместо словаря).

0 голосов
/ 11 февраля 2012

Вы можете использовать NSMutableArray заполнить все UILabel внутри него и в цикле:

int i=1;
for(Player in ArrayOfUILabel){
    Player.text = [[NSUserDefaults standardUserDefaults] objectForKey:(@"K1scoredLabel%d",i)];
    i++;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...