私は本当に言葉を失っています:
DDLogVerbose(@"%@", ([SO2Settings settings].drawMode & SO2DrawModeEraser) ? @"YES" : @"NO");
kMenu.eraserButton.selected = ([SO2Settings settings].drawMode & SO2DrawModeEraser);
DDLogVerbose(@"%@", kMenu.eraserButton);
DDLogVerbose(@"%@", kMenu.eraserButton.selected ? @"YES" : @"NO");
この出力を生成します
詳細 2012-08-05 16:21:05.391 | はい
詳細 2012-08-05 16:21:05.391 | < UIButton: 0x6cfa380; フレーム = (187 10; 59 59); 不透明 = いいえ; タグ = 3; レイヤー = < CALayer: 0x6c37cc0>>
詳細 2012-08-05 16:21:05.391 | いいえ
明らかに、 の値は であるselected
必要がありますがYES
、これはNO
...ここで何が起こっているのでしょうか?
WEIRD UPDATE : 以下のコードは非常に不安な結果をもたらします:
UIButton *btn = [UIButton buttonWithType:UIButtonTypeContactAdd];
btn.selected = 8;
btn.enabled = 8;
NSLog(@"Button is selected : %@, Button is enabled : %@", btn.selected ? @"YES" : @"NO", btn.enabled ? @"YES" : @"NO");
ボタンが選択されている:いいえ、ボタンが有効になっている:はい
最終更新:BOOL
実際にはsigned char
. ただし、有効にされているのに選択されていない理由はわかっていると思います。ヘッダーでUIControl
は、 のような領域を持つビットフィールドselected
(1 ビット フィールド) を使用しているように見えます。奇数なら正常に動作しますが、偶数では正常に動作しません。したがって、挿入するときの数値は 0 または 1 で なければなりません。enabled
は実際のBOOL
プロパティであり、おそらくsigned char
1 ビット フィールドではなく として格納されます。