1

50 と 60 の 2 つの要素を持つ配列があります。

NSArray*array = [NSArray arrayWithObjects:
                [NSNumber numberWithLong:50],
                [NSNumber numberWithLong:60], nil];

後で配列を使用する場合 (実際、この配列をデフォルト リストとして plist ファイルに書き込んでいます)、次のようにします。

long value = [array objectAtIndex:1];

この値の後に、私が理解できない15559が含まれています。デバッガー[array objectAtIndex:1] では(long)60が明確に表示されます。

ここに画像の説明を入力

すみません、何が悪いのか分かりません;(

何か案は?

ロナルド

4

2 に答える 2

6

Alongは ではありませんNSNumbervaluetoとして設定longする[array objectAtIndex:1]場合は、NSNumber から long に変換する必要があります。longValueそのために NSNumber を呼び出すことができます。

なぜコンパイラが文句を言わず、ここで助けてくれないのか不思議に思うかもしれません。これはおそらく、配列内のオブジェクトが ID としてフェッチされるためであり、ほとんどの賭けは外れています。これは配列の一般的な問題です。何をフェッチしているのか、それをどう処理するのかを知るのはあなた次第です。

デバッガーのスクリーンショットは素晴らしいです。頭をすっきりさせて注意深く見ると、一方が であり、他方が long をラップする NSNumber であるvalueという違いが非常に明確であることに注意してください。実際、デバッガーはずっとあなたの質問に答えていました!longarray[0]

于 2012-11-25T05:26:46.393 に答える
2

これはlongValue、配列から取得したオブジェクトを呼び出していないためです。

long value = [[array objectAtIndex:1] longValue];

コードが取得するのは のアドレスで、配列に格納した数値とは無関係NSValueの「ジャンク」値に変換されます。long

于 2012-11-25T05:26:34.177 に答える