我做错了什么?观点在IB中设置。 answersView有3个子视图。每个都是UITextViews。但我得到一个答案,我无法在UIView上设置文字。提前谢谢。
int i;
for (i=0; i<[[[self answersView]subviews]count]; i++)
{
UITextView *currentText = (UITextView *)[[self answersView] viewWithTag:i];
NSString *answer = [[self answersArray] objectAtIndex:i];
[currentText setText:answer];
}
错误是:由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [UIView setText:]:无法识别的选择器发送到实例0x5f56330'
好的,我已经更新了代码
int i;
for (i=0; i<[[[self answersView]subviews]count]; i++)
{
UITextView *currentText = (UITextView *)[[self answersView] viewWithTag:i+1];
if ([currentText isKindOfClass:[UITextView class]]) {
NSString *answer = [[self answersArray] objectAtIndex:i];
[currentText setText:answer];
NSLog(@" tag %d",i + 1);
}
}
感谢您的帮助。
答案 0 :(得分:2)
您想在for循环中添加-1
,这样就不会超出范围。此外,您需要检查子视图是否为文本字段对象,否则您将在其他类型的视图上设置文本。
<强>代码:强>
for (int i=0; i<[[[self answersView]subviews]count]-1; i++) {
if ([[[self answersView] viewWithTag:i] isKindOfClass:@"UITextView") {
UITextView *currentText = (UITextView *)[[self answersView] viewWithTag:i];
NSString *answer = [[self answersArray] objectAtIndex:i];
[currentText setText:answer];
}
}
答案 1 :(得分:1)
1)在调用setText之前检查currentText是否是一个有效的UITextView:
if ([currentText isKindOfClass:[UITextView class]])
{
...
[currentText setText:answer];
...
}
2)我认为它更好,以这种方式遍历子视图:
for (UITextView* currentText in [[self answersView]subViews])
{
...
[currentText setText:answer];
...
}
答案 2 :(得分:0)
将标记值设置为大于0.从1循环到数组计数。
超级视图的默认标记值为0.因此只会出现这样的错误。