2012-01-19 5 views
5

私はiOS 4.3 & iOS 5で自動参照カウントで作業しています。私は私のインターフェイスでNSDateオブジェクトを宣言します。NSDumberがNSNumberに変わるMYSTERY

NSDate *fingerprintsDate; 

その後、私はNSDateという設定 - デバッガを使用し、それを介してステッピングは私が期待する価値があります。

fingerprintsDate = [NSDate date]; 

最後に、私がしよう日付から時間を取得:

if (fingerprintsDate == nil || [fingerprintsDate timeIntervalSinceNow] > 6) 

そして、それが認識されていないセレクタでクラッシュところです:「2012-01-18 23:07:46.662 Netapporter [473:707] - [NSCFNumber timeIntervalSinceNow]:に送られ、認識されないセレクターインスタンス0x194490"

デバッガによれば、私の愛するNSDate読み取り: "fingerprintsDate =(NSCFNumber *)0x194490 139" - 私は説明を印刷するとき、それが読み取ります。 "{値= 139.0000000000、タイプ= kCFNumberFloat32Type}"

私はコード内の他の場所でfingerprintsDateを使って何もしていませんが、何とかNSNumerに変わっています...それを止める方法はありますか?

+1

それをやっている(つまり、あなたの日付を書く)いくつかの他のコードが必要です。もう少しコードを投稿できますか? – dasblinkenlight

+0

日付がゼロまたは6を超えるのはなぜチェックするのですか?これは私のためにチェックしてください:if([[myNum className] isEqualToString:@ "NSCFNumber"]){NSLog:(@ "は数字です)} – CodaFi

+0

ここに表示されているコードに問題はありませんが、あなたが間違った場所(パラメータ)で "timeIntervalSinceNow"メソッドの戻り値を使用しようとしている可能性があります。実際には - (NSTimeInterval)timeIntervalSinceNow "浮動小数点値を返してください – kulss

答えて

0

[NSDate date]は保持されない値を返します(アークを使用している場合は弱い)ので、その割り当てと[fingerprintsDate timeIntervalSinceNow]を呼び出す間に解放される可能性が最も高いです。それを保持された(強い)プロパティに割り当てると、それが保持されます。

+0

ARCのデフォルトはローカルです。私はそうは思わない。 –

0

GCCでコンパイルしてGBDでデバッグしていますか?私の質問に関連している可能性があります:-[NSDate timeIntervalSinceDate:] returns very small number on GCC 4.2, but works as expected on LLVM-GCC 4.2 on iOS4.3 Simulator

+0

それは '[fingerprintsDate timeIntervalSinceNow]'が 'figerprintsDate'がNSDumberではなくNSNumberであるという主張でどのようにクラッシュするのでしょうか? – matt

+0

それは直接ではありません。それは、iOS4.3で同様のAPIを使用したときに見た、別の奇妙な動作です。 –

関連する問題