2011-02-01 24 views
6

Tôi có một số NSTimeInterval và tôi có giá trị JSON 1257808000000.NSTimeInterval -> loại con trỏ không tương thích

Tôi làm điều này:

NSTimeInterval *myTimestamp = [myJSON objectForKey:@"thetimestamp"]; 

Nhưng tôi nhận được cảnh báo này:

Incompatible pointer types initializing 'NSTimeInterval *' (aka 'double *') 
with an expression of type 'id' 

Làm thế nào tôi có thể giải quyết vấn đề này?

Trân trọng.

Trả lời

16

NSTimeInterval thực sự là một giá trị kép. Nó không phải là một đối tượng.

NSTimeInterval myTimestamp = [[myJSON objectForKey:@"thetimestamp"] doubleValue]; 
+0

Tốt gọi. Tôi nghĩ rằng rất nhiều người dường như không hiểu được dấu hoa thị. Tôi mới học được gần đây. Mặc dù tôi nghĩ anh ấy sẽ phải làm một số phân tích đặc biệt nếu giá trị JSON của anh ấy chỉ là một con số lớn như ví dụ anh ấy đã đăng. –

+0

objectForKey là một phương pháp dictinoary trả về một id, bạn không thể chuyển đổi nó như vậy. –

+1

@Oleg Danu, bạn có thể đúng nhưng tôi nghĩ rằng điều này thực sự sẽ hoạt động vì giá trị trả lại phải là NSString hoặc NSNumber và cả hai trả lời là doubleValue. bạn đã thử nghiệm rằng điều này không hoạt động? – taskinoor

-4

Hãy thử

NSTimeInterval *myTimestamp = (NSTimeInterval*)[myJSON objectForKey:@"thetimestamp"]; 
+0

-1 xin lỗi, NSTimeInterval là một đối tượng double, không phải là objc - việc tạo một 'id' thành' double * 'không thực hiện chuyển đổi kiểu nào. – justin

+0

-1 không chỉ vậy, @Oleg vừa tạo ra một con trỏ đến một 'double', mà nếu bạn làm theo nó thông qua kết luận hợp lý của nó là rõ ràng 'hành vi undefined' theo C [89] 9 ngôn ngữ spec như bạn đang rất rõ ràng loại punning thông qua một con trỏ. – johne

1

nếu đối tượng của bạn cho khóa @"thetimestamp" là một NSString hoặc NSNumber sau đó

NSTimeInterval myTimestamp = [[myJSON objectForKey:@"thetimestamp"] doubleValue]; 
+0

ví dụ đầu tiên của bạn (NSString) là sai. ví dụ thứ hai (NSNumber) là đúng, giả sử tất nhiên 'objectForKey:' trả về một 'NSNumber' hoặc' NSString'. thứ hai sẽ làm việc cho NSNumber, và cho NSString khi chuỗi thực sự đại diện cho một số (tài liệu chi tiết tại sao/như thế nào - [NSString doubleValue] 'có thể thất bại). – justin

+0

@Justin: tất nhiên! đã cập nhật câu trả lời. –

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