2013-07-08 93 views
1

我有一個while循環應該循環遍歷一個條件,但不能多次遍歷整個過程。Objective C雖然循環不循環

這是我的相關代碼:

NSInteger i = 0; 
    while(i <= building.departments.count) 
    { 
     NSLog(@"Number of building departments: %lu", (unsigned long)building.departments.count); 
     NSLog(@"i : %ld", (long)i); 

     UILabel *dtitleLB = [[UILabel alloc] initWithFrame:CGRectMake(5, y, 310, 20)]; 
     dtitleLB.text = ((DBDepartment*)[building.departments objectAtIndex:i]).Name; 
     dtitleLB.textAlignment = UITextAlignmentLeft; 
     dtitleLB.backgroundColor = [UIColor clearColor]; 
     dtitleLB.textColor = [UIColor lightGrayColor]; 
     dtitleLB.font = [UIFont fontWithName:@"Helvetica" size:(16.0)]; 
     [scrollView addSubview:dtitleLB]; 
     y += 30; 

     UIButton* dphoneNB = [UIButton buttonWithType:UIButtonTypeCustom]; 
     [dphoneNB setContentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft]; 
     [dphoneNB setTitleColor:[UIColor colorWithRed:0.3 green:0.3 blue:0.9 alpha:1.0] forState:UIControlStateNormal]; 
     [dphoneNB addTarget:self action:@selector(numberPress:) forControlEvents:UIControlEventTouchUpInside]; 
     [dphoneNB setTitle:((DBDepartment*)[building.departments objectAtIndex:i]).Phone forState:UIControlStateNormal]; i++; 
     dphoneNB.frame = CGRectMake(5, y, 315, 25); 
     [scrollView addSubview:dphoneNB]; 
     y += 30; 

     UIButton* dwebsiteNB = [UIButton buttonWithType:UIButtonTypeCustom]; 
     [dwebsiteNB setContentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft]; 
     [dwebsiteNB setTitleColor:[UIColor colorWithRed:0.3 green:0.3 blue:0.9 alpha:1.0] forState:UIControlStateNormal]; 
     [dwebsiteNB addTarget:self action:@selector(linkPress:) forControlEvents:UIControlEventTouchUpInside]; 
     [dwebsiteNB setTitle:((DBDepartment*)[self->building.departments objectAtIndex:i - 1]).Website forState:UIControlStateNormal]; i++; 
     dwebsiteNB.frame = CGRectMake(5, y, 315, 25); 
     [scrollView addSubview:dwebsiteNB]; 
     y += 30; 

     i++; 
    } 

用於第一的NSLog = 1或更大的取決於用戶的選擇(從未0)輸出。 第二個NSLog = 0的輸出永遠不會變大。

如果你可以檢查我的代碼,看看是否有任何明顯的錯誤,那將不勝感激。

謝謝!

+1

「building.departments.count」是否等於0或1?你似乎也在幾個地方增加了「我」。 –

+0

aso在頂部的2個NSLog的輸出會很好 – John

+0

你有多少個部門? –

回答

1

不循環(或循環不規律)的原因是因爲您在多個點中增加了i。看下面的幾行(打破了看起來更容易)。

... 
     [dphoneNB setTitle:((DBDepartment*)[building.departments 
     objectAtIndex:i]).Phone forState:UIControlStateNormal]; i++; 
... 
     [dwebsiteNB setTitle:((DBDepartment*)[self->building.departments 
     objectAtIndex:i - 1]).Website forState:UIControlStateNormal]; i++; 
... 
     i++; 

作爲替代while環這樣的,一個for循環就足夠了。

+0

非常感謝你在那裏發現我的錯誤,你完全發現了錯誤! – VonKoob

+0

有時候,第二組眼睛使所有的區別:) –

+0

@VonKoob原始代碼也非常低效。爲什麼一遍又一遍地提取'Department'對象?在循環的頂部獲取一次,並將其存儲在一個變量中。更好的是,使用'for(DBDepartment * dept in building.departments)'而不是'while'循環。 – rmaddy