2012-01-19 65 views
5

我正在使用iOS 4.3 &具有自動引用計數的iOS 5。我在接口聲明的NSDate對象:NSDate變成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}」

我沒有做任何其他事情w/fingerprintsDate在代碼中的任何地方 - 但不知何故它變成了NSNumer ...任何想法如何阻止它?

+1

必須有一些其他代碼「在之間」這樣做(即寫作你的日期)。你能發佈更多的代碼嗎? – dasblinkenlight

+0

你爲什麼要檢查日期是否爲6或以上?檢查它是否適用於我:if([[myNum className] isEqualToString:@「NSCFNumber」]){NSLog:(@「is number)} – CodaFi

+0

這裏顯示的代碼沒有問題,但是在閱讀bug報告可能是你試圖在錯誤的地方(參數)使用「timeIntervalSinceNow」方法的返回值,實際上是「 - (NSTimeInterval)timeIntervalSinceNow」返回浮點值 – kulss

回答

0

[NSDate date]返回一個非保留值(如果使用的是弧,則返回值較弱),因此它最有可能在該賦值和調用[fingerprintsDate timeIntervalSinceNow]之間的某處發佈。當您將其分配給保留的(強)財產時,它將被保留。

+0

ARC默認本地人強。我不認爲就是這樣。 –