当我尝试按标签获取文本字段的值时应用程序崩溃

Posted

技术标签:

【中文标题】当我尝试按标签获取文本字段的值时应用程序崩溃【英文标题】:App crashes when I try to get value of textfield by tag 【发布时间】:2014-03-21 17:47:13 【问题描述】:

当我尝试通过这样的标签访问它们时,我正在向我的应用程序动态添加文本字段:

UITextField *textField = (UITextField *)[self.view viewWithTag:0];

然后尝试获取值:

NSString *val = textField.text;

应用程序崩溃,我收到此错误:

-[UIView text]: unrecognized selector sent to instance 0x1edb0c30

任何有关如何解决此问题的帮助将不胜感激

【问题讨论】:

永远不要使用0 作为特定标签,因为这是所有视图的默认标签。 尽可能用最大标签设置你的文本字段。例如:textField.tag = 32222; 【参考方案1】:

默认tag 值为0。所以在这里[self.view viewWithTag:0]; 可以接收到一个不是UITextField 并且不响应text 的视图。

您可以使用检查对象的类

[your_object isMemberOfClass:[UITextField class]];

【讨论】:

【参考方案2】:

我会比一些人说的更进一步,而不是使用标签,您可以通过引用来引用您的特定文本字段:

// Create an array to hold your textfields
NSMutableArray *textFields = [NSMutableArray array]

// Create your textfields and add them to the array
UITextField *textField;
for (NSUInteger idx = 0: idx++; idx < numberOfTextFieldsYouWant) 
    textField = [UITextField alloc] initWithFrame:<whateverYouWant>];
    [textFields addObject:textField];

由于您将对象添加到数组中,而不是使用标记值 0、1、2... 您可以通过它在数组中的索引来访问它

所以而不是

UITextField *textField = (UITextField *)[self.view viewWithTag:0];

你可以写:

UITextField *textField = [textFields objectAtIndex:0];

它更简洁,不依赖于魔术标签,并且您拥有所有动态文本字段的数组,您可以在一个地方删除或更改。

【讨论】:

以上是关于当我尝试按标签获取文本字段的值时应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

找不到值时 Android 应用程序崩溃

日期选择器在文本字段 iOS 8 上崩溃

尝试在 NSMuableDictionary 中设置值时应用程序崩溃

获取动态更改的 asp.net 标签的值

我是编码的新手,我不明白为零

UITextField(有时)在键入时使应用程序崩溃