2012-06-03 176 views
0

我翻一個簡單的BOOL值是這樣的:簡單布爾切換不起作用?

active = !active; 
NSLog(@"%@", active? @"active" : @"not active"); 

我已經這樣做了無數次,但現在,由於某種原因,它不工作,這真的得罪我了。當流量在這裏遇到時,它總是打印「活動」。這不是開關!

這裏是我的界面:

@interface HeaderView : UIView { 
    UILabel *label; 
    UIButton *button; 
    UIImageView *background; 
    BOOL active; 
    int section; 

    __weak id<HeaderViewDelegate> delegate; 
} 

和功能在其中執行操作:

- (void)actionTUI:(id)sender { 
    active = !active; 
    NSLog(@"%@", active? @"active" : @"not active"); 
    UIImage *image = nil; 
    if (active) { 
     image = [UIImage imageNamed:@"active.png"]; 
    } else { 
     image = [UIImage imageNamed:@"unactive.png"]; 
    } 
    [button setBackgroundImage:image forState:UIControlStateNormal]; 
    [delegate headerView:self toggled:active]; 
} 

感謝

+0

我想知道,默認情況下會將其設置爲YES,因爲您沒有爲其分配任何值,所以如果您總是運行它,並且每次運行它時都默認設置爲默認值,那麼它總是會有相同的結果。我不確定是否是這種情況。 – pasawaya

回答

0

好的,但問題是,切換後,我就重裝,這顯然回顧了實現代碼如下:

- (UIView *)tableView:(UITableView *)_tableView viewForHeaderInSection:(NSInteger)section { 

這就造成了新的頭視圖來分配/初始化激活設置爲NO,切換後立即設置爲YES。這就是爲什麼每次,即使在翻轉它被設置爲活動的值之後(因爲之後它將被丟棄,並且新的標題視圖將會到達它的位置)。

+0

如果這是答案,那麼你應該把它標記爲這樣。 – ThomasW

+0

必須等2天才能將自己的答案標記爲正確。 – 0xSina

2

BOOL EAN值,與所有其他類型的,被初始化爲NULL( 0,FALSE,NO),除非分配了不同的值。你正在爲你的BOOL分配一個不是(NO)的,每次運行都打印YES。另外,你的NSLog()很奇怪,它可能是以錯誤的方式評估自己,並且很可能導致這個問題。它不應該包括文字:

NSLog(active? @"active" : @"not active"); 
+0

他的'NSLog()'很好,第一個參數幾乎總是一個編譯時常量表達式 - 通常是一個文字。 –