2011-02-07 2 views
1

Я просто хотел спросить, как можно использовать переменную в качестве селектора. Мой код выглядит следующим образом:Objective C - Use Variable as selector

NSString *stunde = [lesson objectForKey:@"stunde"]; // value is t1s1, then t1s2 then t1s3 etc. 
t1s1.text=subject; 

это работает без проблем. Но, как я должен перебрать 40 меток, было бы удивительным, чтобы сделать это следующим образом:

NSString *stunde = [lesson objectForKey:@"stunde"]; 
     **stunde**.text=subject; 

как я могу я поговорить с меткой динамически, используя значение, которое я получил сформировать строку JSON в течение петля.

Результат должен выглядеть следующим образом:

NSString *stunde = [lesson objectForKey:@"stunde"]; 
     [email protected]"English"; 

NSString *stunde = [lesson objectForKey:@"stunde"]; 
     [email protected]"German"; 

NSString *stunde = [lesson objectForKey:@"stunde"]; 
     [email protected]"Business Studies"; 

и т.д .....

Я надеюсь, что вы можете помочь мне, и знаете, что я имею в виду

Заранее спасибо

UPDATE :

Я только что заработал (жесткий):

labels[0] = t1s1; 
    labels[1] = t1s2; 
    labels[2] = t1s3; 
    for (NSDictionary *lessons in list) 
    { 
     int TotalLessons = [list count]; 

     NSString *fach = [lessons objectForKey:@"fach"]; 
     UILabel *stunde = [lessons objectForKey:@"stunde"]; 
     //labels[counter]=stunde; 

     labels[counter].text=fach; 


     counter=counter+1; 
     if(counter>=TotalLessons){ 
      break; 
     } 



    } 

, но как будет 40-50 этикетки Я хотел бы добавить label_names динамически в массив: так:

UILabel *stunde = [lessons objectForKey:@"stunde"]; 
labels[counter]=stunde; 

значение «Stunde» будет определен как UILabel и затем добавляется в массив. Но почему приложение рушится? что не так? :(

благодарит

+0

Что это с начинающими чувствами это желание поиграть с вещами 'eval'-esque? В любом случае, ответ - это массивы (или любая другая коллекция) - в миллиард раз быстрее, более безопасно и безопасно. Мой ObjC-fu буквально равен нулю, так что вместо этого просто забавный комментарий ответа;) – delnan

+0

К сожалению, я чертов новичок: (не могли бы вы показать мне пример, как решить это? thx – Chris

ответ

1

Вы должны сначала инициализировать словарь так:

NSDictionary *Labels = [[NSDictionary alloc] initWithObjectsAndKeys: 
    LabelObject1, @"LabelObjectName1", 
    LabelObject2, @"LabelObjectName2", 
    LabelObject3, @"LabelObjectName3", 
    ... 
    LabelObjectN, @"LabelObjectNameN", 
    nil]; 

, то вы можете получить доступ к каждой метки следующим образом:

NSString *stunde = [lesson objectForKey:@"stunde"]; 
((UILabel *)[Labels objectForKey:stunde]).text = @"Some text"; 
+0

Я получаю сообщение об ошибке :(«запрос для текста участника» в чем-то, что не является структурой или соединением – Chris

+0

Вы объявили каждый «LabelObjectX» как 'UILabel * LabelObjectX'? –

+0

@Christopher: проблема в том, что' objectForKey: ' возвращает 'id' .Это означает, что он принимает значение' .text' как элемент C-структуры, а не аксессуар свойства. Проблема должна исчезнуть, если вы это сделаете: '[[Ярлыки objectForKey: @" stunde "] setText: @ "Some text"]; ' – JeremyP