2012-04-01 2 views
1

У меня возникла проблема с циклом с помощью набора динамически созданных UITextFields и сохранения этих значений в виде двойника, который будет добавлен в массив позже. Я все еще довольно новичок в программировании программирования, так что неважно, если этот вопрос кажется тривиальным. Благодарю. Это то, что у меня есть до сих пор.Зацикливание через UITextField и сохранение двойных значений

NSMutableArray *textFieldCashArray = [[NSMutableArray alloc] init]; 
double textFieldCash; 
for (int y=0; y<25; y++) {  
    UITextField *myLabel = (UITextField *)[self.view viewWithTag:y];    
    textFieldCash = [myLabel.text doubleValue]; 
    [textFieldCashArray addObject:[NSNumber numberWithDouble:textFieldCash]];  
} 

PS а вот сообщение об ошибке я получаю

Pro[962:b303] -[UIControl text]: unrecognized selector sent to instance 0x680f850 
2012-04-01 16:05:46.305 iFinance Pro[962:b303] *** Terminating app due to uncaught  exception 'NSInvalidArgumentException', reason: '-[UIControl text]: unrecognized selector sent to instance 0x680f850' 
*** Call stack at first throw: 
+0

Где именно находится этот код в вашем ViewController? –

+0

Являются ли эти 'UITextField'' 'UITableView'? –

ответ

2

Я думаю, что здесь происходит то, что переменная цикла используется как тег, а цикл начинается с нуля , viewWithTag будет отвечать либо получателю, либо одному из его подзонов с заданным тегом, поэтому, если в главном представлении контроллера представления есть тег == 0 (что, вероятно, это так), ваш первый текстовый запрос отправляется на этот вид верхнего уровня.

Попробуйте установить теги текстового поля на некоторое ненулевое значение, начиная с SOME_OFFSET. Затем в вашей петле:

for (y=0; y<25; y++) { 
    UITextField *myLabel = (UITextField *)[self.view viewWithTag:y+SOME_OFFSET]; 
    // ... 
} 
+0

+1 хороший, хорошо пятнистый. –

+0

Спасибо, ваше решение работает! – SNV7

0

Вы должны создать массив в первом:

NSMutableArray *textFieldCashArray = [NSMutableArray array]; 

Редактировать
Ваш журнал ошибок показывает, что вы получают другой объект UIControl (например, UIBtton) вместо UITextField. Проверьте теги на xib (или алгоритм, если вы установите программно), и убедитесь, что объекты UITextField имеют соответствующие теги

1

danh, безусловно, верно касается причины и решения этой проблемы. Просто чтобы добавить немного, таких случаев можно избежать, проверяя класс перед литьем.

if ([[self.view viewWithTag:y] isKindOfClass:[UITextField class]]) { 
    UITextField *myLabel = (UITextField *)[self.view viewWithTag:y];    
    textFieldCash = [myLabel.text doubleValue]; 
    [textFieldCashArray addObject:[NSNumber numberWithDouble:textFieldCash]]; 
} 
Смежные вопросы