0

チャートビューを作成し、特定の X インデックスに対応する Y 値を要求できるデータソースを与えています。場合によっては、特定の X インデックスに Y 値がないことがあります。0 は完全に有効な Y 値である可能性があるため、この状況では nil を送信できません。価値がまったくないことを伝えるための目的Cの最良の方法は何ですか?

4

5 に答える 5

3

ある種のオブジェクトを使用してモデルとビューの間でデータを送信しているように見えます。おそらくNSNumber、値を保持していて、メッセージを送信して値を取得しているのですが、オブジェクトがnil、送信されたメッセージはを返し0ます。

そのとおりです。この場合、オブジェクトがnilであるかどうかを確認し、それに応じて続行します。

- (void)plotValue:(NSNumber *)number
{
    if (number == nil) {
        // no value
    } else {
        // Value may be 0, but you can now safely plot it.
    }
}
于 2013-03-15T06:22:42.503 に答える
2

nilありません0。それらは違う。

を使用している場合NSNumbernilは明らかに の集合から切り離されていNSNumberます。

を使用している場合はint、使用できませんnil

于 2013-03-15T06:19:24.967 に答える
2

データ ソースでプリミティブを使用しないでください。代わりに NSNumber を使用してください。次に、nil と値 0 を格納する NSNumber を区別できます。

于 2013-03-15T06:24:25.877 に答える
1

NSNumberオブジェクト ( )を使用したくない場合は、負の数(可能な場合) またはデータソースから返される可能性が低い最大/最小整数を返すことができます。

于 2013-03-15T06:31:08.053 に答える
0

NSInteger などのスカラーについて話していると思います。Y 値に文字通り任意の整数が有効な場合、これを行う方法はありません。ただし、ほとんどの場合、実用的な範囲があるため、この範囲外の値を選択して「特別」にすることができます。たとえば、Cocoa には値NSNotFoundがあり、配列にないオブジェクトのインデックスを要求すると NSArray が返します。これは、可能な最大の NSInteger として定義されます。Y 値が NSIntegerMax にならない場合は、これを自分で再利用できます。

このためだけに特別な型を作成したくないと仮定すると、他のオプションは、メソッドが Y と Y が実際に見つかったかどうかの両方を返すようにすることです。たとえば、いくつかの大まかな擬似コード:

- (NSInteger)yForX:(NSInteger)x wasFound:(BOOL *)found {
    if (yWasFound) {
        if (found) 
            *found = YES;
        return y;
    } else {
        if (found)
            *found = NO;
        return 0;
    }
}

一部の人が示唆しているように、NSNumber を使用することもできますが、nil を取得するためだけに NSNumbers を処理するのは少し面倒です。

于 2013-03-15T06:37:42.117 に答える