2016-09-26 14 views
-2

私はNSNumberを持っています。基本的な計算をしようとすると失敗します。 目的C計算が失敗する


NSTimeInterval contentExpirationInSecs = [contentExpirationInDays intValue] * 24 * 60 * 60; 
::私はそれが私の狂った数字を与える秒に変換するための基本的な乗算をしようとすると

NSNumber *contentExpirationInDays = [NSNumber numberWithInt: 1]; 

はいくつかの回答で説明したように次のビットが今無関係です:

コンソールで次のコマンドを実行すると、次の結果が得られます。

P対POに関する情報については、3210
(lldb) po [contentExpirationInDays intValue] 
1 

(lldb) po [contentExpirationInDays intValue] * 2 
-148319360 

UPDATE

感謝。

NSNumber *contentExpirationInDays = [[NSNumber numberWithInt:1]; 
NSTimeInterval contentExpiration = ([contentExpirationInDays intValue] * 24 * 60 * 60); 
myObj.expirationDate = [[NSDate date] dateByAddingTimeInterval:contentExpiration]; 

obj.expirationDate通常、過去に未来または何年に何年で終わるの代わりに:私は詳細...

だから、ここで私が経験しています本当の問題であることを知りませんでした今日より1日早い。

+3

'po'は、「印刷対象」です。整数やその他のスカラ値を出力するには 'p'を使います。 –

+0

あなたはどのバージョンのXcodeを使用していますか?私のXcode 8で完璧に動作します。 –

+0

これは、最初の行で代入( '=')の後に余分な '['を削除すると私にとってもうまくいきます。しかし、日付の計算は少し素朴です。 –

答えて

-1

NSNumberは、数値を表すオブジェクトの基本クラスであり、intやfloatなどの基本スカラー値ではありません。

番号をオブジェクトとして必要とする場合は、代わりにNSDecimalNumberを使用してください。それ以外の場合は、スカラ型のままにしてください。

+1

彼は '-intValue'を使ってそれをスカラーに変換します。 –

+0

申し訳ありませんが、私の悪い。あまりにも早く読むことを教えてください。 – drekka

1

POはプリント所与のポインタによって指定されたアドレスにオブジェクトの説明にデバッガを求めています。マーティンRが言ったように、単にスカラー値をプリントアウトするための代わりPを使用します。

p [contentExpirationInDays intValue] * 2 
関連する問題