2012-01-19 36 views
5

Tôi đang làm việc trong iOS 4.3 & iOS 5 với tính năng tham chiếu tự động. Tôi tuyên bố một đối tượng NSDate trong giao diện của tôi:NSDate chuyển thành NSNumber MYSTERY

NSDate *fingerprintsDate; 

Sau đó, tôi đặt rằng NSDate - sử dụng trình gỡ lỗi và bước qua nó có giá trị tôi mong đợi:

fingerprintsDate = [NSDate date]; 

Cuối cùng, tôi cố gắng có được thời gian từ ngày:

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

Và đó là nơi nó bị treo với selector không được công nhận: "2012/01/18 23: 07: 46,662 Netapporter [473: 707] - [NSCFNumber timeIntervalSinceNow]: chọn không được công nhận gửi đến ví dụ 0x194490"

Theo debugger, NSDate thân yêu của tôi đọc: "fingerprintsDate = (NSCFNumber *) 0x194490 139" - khi tôi in mô tả nó đọc: "{value = 139,0000000000, type = kCFNumberFloat32Type}"

Tôi không làm bất cứ điều gì khác w/fingerprintsDate bất cứ nơi nào khác trong mã - nhưng bằng cách nào đó nó biến thành một NSNumer ... Bất kỳ ý tưởng làm thế nào để ngăn chặn nó?

+1

Phải có một số mã khác "ở giữa" đang thực hiện điều đó (cụ thể là ghi ngày của bạn). Bạn có thể đăng thêm một số mã không? – dasblinkenlight

+0

Tại sao bạn sẽ kiểm tra xem ngày đó có phải là số không hoặc trên 6? Kiểm tra nó với điều này cho tôi: if ([[myNum className] isEqualToString: @ "NSCFNumber"]) {NSLog: (@ "là số)} – CodaFi

+0

Không có vấn đề với mã được hiển thị ở đây nhưng sau khi đọc lỗi báo cáo có thể là bạn đang cố gắng sử dụng giá trị trả về của phương thức "timeIntervalSinceNow" ở sai vị trí (tham số), thực sự "- (NSTimeInterval) timeIntervalSinceNow" trả về giá trị float. – kulss

Trả lời

0

[Ngày NSDate] trả về giá trị không giữ lại (hoặc yếu nếu bạn đang sử dụng cung), vì vậy rất có thể đã được phát hành ở đâu đó giữa nhiệm vụ đó và gọi [fingerprintsDate timeIntervalSinceNow]. Khi bạn gán nó cho một tài sản được giữ lại (mạnh), nó sẽ được giữ lại.

+0

ARC mặc định người dân địa phương trở nên mạnh mẽ. Tôi không nghĩ vậy. –

0

Bạn đang gỡ lỗi với GBD, biên dịch bằng GCC? Có thể liên quan đến câu hỏi của tôi: -[NSDate timeIntervalSinceDate:] returns very small number on GCC 4.2, but works as expected on LLVM-GCC 4.2 on iOS4.3 Simulator

+0

Và làm cách nào để giải thích '[fingerprintsDate timeIntervalSinceNow]' gặp sự cố rằng 'figerprintsDate' là một NSNumber chứ không phải NSDate? – matt

+0

Nó không trực tiếp. Nó chỉ là một số hành vi kỳ lạ khác mà tôi đã thấy với các API tương tự trên iOS4.3. –

Các vấn đề liên quan