2011-01-24 64 views
0

我在做什么错?意见在IB中设置。有3个answersView子视图。每个都是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

我可以知道你的接受的答案是如何解决这个问题呢?您已经使用我的解决方案并接受了其他答案? – KingofBliss 2011-01-25 02:32:47

回答

2

你想在你添加-1 for循环,这样你就不会出界。此外,您需要检查子视图是否为文本字段对象,否则您将在某种其他类型的视图上设置文本。

代码:

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

设置标记值大于0.从1循环到数组数。

超级视图的默认标签值为0.因为只有你得到这样的错误。

+0

谢谢。这是问题所在。然而,使用下面的代码我不会得到标签3,如果我做了一些改变,它超出了界限,尽管我知道在视图中有3个UITextViews,没有别的。 int i; \t为(I = 1;我<[[[自answersView]子视图]计数];我++) \t { \t \t的UITextView * currentText =(UITextView的*)[[自answersView] viewWithTag:ⅰ]; \t \t NSString * answer = [[self answersArray] objectAtIndex:i]; \t \t [currentText setText:answer]; (@“tag%d”,i); \t} – intomo 2011-01-24 17:05:00

+0

for(i = 1; i [[[self answersView] subviews] count] +1; i ++) – KingofBliss 2011-01-25 02:33:07

1

嘿那里, 我认为你的代码很容易出错,因为它依赖于视图总是会有一个标记号码集。你可以做两件事情在我看来:

1)检查调用的setText是currentText是一个有效的UITextView做这样的事情之前:

if ([currentText isKindOfClass:[UITextView class]]) 
{ 
    ... 
    [currentText setText:answer]; 
    ... 
} 

2)我真的认为这是更好,环通这样子视图:

for (UITextView* currentText in [[self answersView]subViews]) 
{ 
    ... 
    [currentText setText:answer]; 
    ... 
}