0
 NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
    [f setNumberStyle:NSNumberFormatterDecimalStyle];
    NSNumber * myNumber = [f numberFromString:txt2.text];
    ctbook.number=myNumber;

上記のコードでは、ctbook.number のパラメーターが NSNumber であるため、テキスト フィールドの値を NSNumber に変換してから、ctbook.number に渡します。しかし、ctbook.number から値を取得すると、テキスト フィールドに渡した番号とは異なる新しい番号を取得しました。私は何が欠けていますか?このコードの何が問題になっていますか?

4

2 に答える 2

1

Core Data 属性のデータ型として "Integer 32" を使用すると、Core Data は (静かに) 値を 32 ビットに切り捨てます。NSNumberより大きい値 を割り当てると、2^31 - 1 = 214748364732 ビットに切り捨てられます。これが、データを読み戻したときに異なる値を取得する理由を説明しています。

Core Data エンティティのデータ型として「Integer 64」を選択できます。これにより、最大値は2^63 - 1 = 9223372036854775807.

于 2013-04-06T05:58:26.303 に答える
1

追加情報がなければ、何が問題なのかを判断するのは困難ですが、手早く汚いものが必要な場合は、 のintValueまたはintegerValueメソッドを使用できますNSString

ctbook.number = @(txt2.txt.intValue);

(@(x)構文は単に の省略形です[NSNumber numberWithInt:txt2.txt.intValue])

int文字列が有効でない場合、intValue呼び出しは返されることに注意してください0

編集

最近のコメントを考えると、問題は変換ではなく、整数表現にあります。

数値を表すには 32 ビットでは不十分なので、より小さい数値を使用するか、 を使用して 64 ビット表現に切り替えることをお勧めしますint64_t

于 2013-04-06T05:46:27.350 に答える