1

たぶんこれは少しトリッキーです....

誰かが言った:

(たとえば NSTableView selectedRowIndexes の) カウントは、簡単に YES でも NO でもありません。別の例では、ユーザーが 256 の倍数のアイテムを選択した場合、カウントの最下位バイトは 0 になるため、選択があったとしても BOOL 値は NO になります。

本当ですか?

そのため、ステートメント like を使用するのは安全ではなく、 を使用するif([[uiTableView selectedRowIndexes] count]) {...}必要がありますif([[uiTableView selectedRowIndexes] count] > 0) {...}

右 ?コメントはありますか?

ありがとう...

4

1 に答える 1

4

そうではありません。

C では、ステートメントの目的上、ifゼロ以外の値の式はすべて true として評価されます。

Objective-C では、BOOL型は acharです。BOOLしたがって、明示的または暗黙的に整数値を にキャストする状況では、下位 8 ビットのみが保持されるため、256 の倍数は として解釈されNOます。BOOLこの問題に遭遇する簡単な方法は、値を持つ関数で整数を返すことです:

- (BOOL)arrayIsNotEmpty:(NSArray *)array
{
    // WRONG - will return NO if array contains a multiple of 256 items
    return [array count];

    // RIGHT
    return ([array count] > 0);
}

ただし、フォームの使用

if ([array count])
    // ...

キャストせずに整数を真理値として評価するBOOLものは問題ありません。

于 2010-11-05T22:36:21.700 に答える