循环通过UITextField并存储双值

时间:2012-04-01 19:59:03

标签: iphone objective-c xcode cocoa-touch ipad

我无法循环遍历一组动态创建的UITextField,并将这些值存储为double,以便稍后添加到数组中。我仍然对obj-c编程很陌生,所以如果这个问题看似微不足道,请耐心等待。谢谢。这是我到目前为止所做的。

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]];    
}

P.S,这是我正在收到的错误消息

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:

3 个答案:

答案 0 :(得分:2)

我认为这里发生的是循环变量被用作标记,循环从零开始。 viewWithTag将使用给定标记回答接收者或其中一个子视图,因此如果视图控制器的主视图具有tag == 0(它可能确实如此),则您的第一个文本请求将被发送到该顶级视图。 / p>

尝试将文本字段标记设置为某个非零值,从SOME_OFFSET开始。然后在你的循环中:

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

答案 1 :(得分:1)

对于这个问题的原因和解决方案,danh肯定是正确的。只是添加一点,通过在转换之前检查Class,可以在某种程度上避免这样的情况。

if ([[self.view viewWithTag:y] isKindOfClass:[UITextField class]]) {
    UITextField *myLabel = (UITextField *)[self.view viewWithTag:y];            
    textFieldCash =  [myLabel.text doubleValue];
    [textFieldCashArray addObject:[NSNumber numberWithDouble:textFieldCash]];
}

答案 2 :(得分:0)

您应该首先创建数组:

NSMutableArray *textFieldCashArray = [NSMutableArray array];

修改
您的错误日志显示您正在接收另一个UIControl对象(例如UIBtton)而不是UITextField。检查xib上的标记(如果以编程方式设置,则检查算法),并确保UITextField对象具有相应的标记