2015-09-25 52 views
0

我有過這樣的代碼已經被打破了,它不僅是直到最近我才知道這是無效的:如何將([theEvent modifierFlags]&NSCommandKeyMask)的結果轉換爲BOOL?

BOOL alwaysDrawGraphic = ([theEvent modifierFlags] & NSAlternateKeyMask); 
    if(alwaysDrawGraphic) 
    { 
     NSLog(@"Hey"); 
    } 

由於位運算&的結果,不返回BOOL 。

所以我想我可以用lldbpo ([theEvent modifierFlags] & NSAlternateKeyMask),但我得到這個錯誤:

error: use of undeclared identifier 'NSAlternateKeyMask' 
error: 1 errors parsing expression 

於是我試着只是NSLog值時,我有命令鍵按下,
NSLog(@"%lu", ([theEvent modifierFlags] & NSCommandKeyMask));

Xcode糾正了我,讓我知道該值是一個unsigned long。但是,當它退出時,我得到這個lu1048576

如果命令鍵爲未按時,它打印0,正如你所期望

所以我的問題是,什麼是價值1048576我我正在接受?
如何將它轉換爲BOOL以便我可以在同一方法中多次重複使用它?

回答

2

你必須檢查如果結果是0或1掩蔽

BOOL alwaysDrawGraphic = ([theEvent modifierFlags] & NSAlternateKeyMask) != 0; 

1048576之後是十六進制0x00100000這是NSCommandKeyMask

+0

比特位置要清楚'alwaysDrawGraphic'將'YES '如果'NSAlternateKeyMask'中的所有標誌都設置在'modifierFlags'中。 – rmaddy

+1

只有一個標誌(位)。掩碼「0x80000」(524288)忽略除「19」這個「NSAlternateKeyMask」位外的所有「0」位。 – vadian