2012-08-15 92 views
1

看起來很簡單,但我不知道爲什麼它不起作用。無法爲BOOL分配值

在我的.h文件我已經聲明:BOOL keyboardIsUp;

然後在我的.m文件:

-(void)keyboardWillShow { 

    NSLog(@"before:"); 
    NSLog(keyboardIsUp? @"Yes" : @"No"); 

    NSLog(@"keyboardWillShow"); 
    keyboardIsUp = YES; 

    NSLog(@"after:"); 
    NSLog(keyboardIsUp? @"Yes" : @"No"); 

    ... 
} 

-(void)keyboardWillHide { 

    NSLog(@"before:"); 
    NSLog(keyboardIsUp? @"Yes" : @"No"); 

    NSLog(@"keyboardWillHide"); 
    keyboardIsUp = NO; 

    NSLog(@"after:"); 
    NSLog(keyboardIsUp? @"Yes" : @"No"); 

    ... 
} 

-(BOOL)keyboardStatus{ 
    NSLog(@"keyboardStatus"); 

    NSLog(keyboardIsUp? @"Yes" : @"No"); 

    return keyboardIsUp; 
} 

的方法是絕對正確調用(我可以從NSLog的消息看到這一點)並在前兩種方法中使用我的NSLog消息,我可以看到BOOL設置正確(在函數的範圍內)。

但是當我打電話keyboardStatus,它總是日誌 「NO」

任何想法?我已經搜索了我的其他代碼,我絕對不會在其他地方更改keyboardIsUp的值。

回答

2

你確定你正在談論你的對象的正確實例嗎?

I.e.這種添加到每個方法的開頭:

NSLog(@"[%@(%p) %@]", self, self, NSStringFromSelector(_cmd)); 

如果十六進制數keyboardWillHide/ShowkeyboardStatus之間變化,那麼你談話的不同實例。如果沒有,其他事情正在發生。

+0

十六進制值確實在'keyboardWillHide/Show'和'keyboardStatus'之間改變。所以我想我不是在談論我的對象的同一個實例。謝謝。 – BloonsTowerDefence 2012-08-15 17:16:28

+0

我敢打賭,你有一個從XIB文件加載的實例,你在代碼中分配/初始化第二個實例。消除手動分配的實例。 – bbum 2012-08-15 17:45:05

1

也許你不是在同一個對象上調用它們?

相關問題