2011-01-24 86 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]; 
    ... 
}