2012-01-19 13 views
5

Pracuję w iOS 4.3 & iOS 5 z automatycznym liczeniem odwołań. Oświadczam obiektu NSDate w moim interfejsu:NSDate zamienia się w NSNumber MYSTERY

NSDate *fingerprintsDate; 

Później ustawić, że NSDate - za pomocą debuggera i przechodzeniu ma wartość Spodziewam:

fingerprintsDate = [NSDate date]; 

Wreszcie, staram się uzyskać czas od dnia:

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

I to gdzie to wywala z nierozpoznanym selektor „2012-01-18 23: 07: 46.662 Netapporter [473: 707] - [NSCFNumber timeIntervalSinceNow]: nierozpoznany selektor wysyłane do instancja 0x194490"

Według debugger, moja droga NSDate brzmi: "fingerprintsDate = (NSCFNumber *) 0x194490 139" - kiedy to wydrukować opis brzmi: "{value = 139,0000000000, type = kCFNumberFloat32Type}"

Nie robię nic więcej z odciskami palcówData nigdzie indziej w kodzie - ale jakoś to zmienia się w NSNumer ... Jakieś pomysły, jak to zatrzymać?

+1

Musi istnieć jakiś inny kod "między", który to robi (a mianowicie, pisząc datę). Czy możesz dodać więcej kodu? – dasblinkenlight

+0

Dlaczego miałbyś sprawdzić, czy data jest zerowa czy równa 6? Sprawdź to dla mnie: if ([[myNum className] isEqualToString: @ "NSCFNumber"]) {NSLog: (@ "jest numerem)} – CodaFi

+0

Nie ma problemu z wyświetlonym kodem, ale po przeczytaniu błędu raport może być próbujesz użyć zwracanej wartości "timeIntervalSinceNow" metoda w niewłaściwym miejscu (parametr), faktycznie "- (NSTimeInterval) timeIntervalSinceNow" zwracają wartość float. – kulss

Odpowiedz

0

[NSDate date] zwraca nieprzechwyconą wartość (lub słabą, jeśli używasz łuku), więc najprawdopodobniej została zwolniona gdzieś pomiędzy tym zadaniem a wywołaniem [fingerprintsDate timeIntervalSinceNow]. Po przypisaniu go do zachowanej (silnej) właściwości zostaje ona zachowana.

+0

ARC domyślnie ustawia mieszkańców na silne. Nie sądzę, że to jest to. –