2012-11-17 11 views
5
NSNumber * latitude = [NSNumber numberWithDouble:[[cityDictionary valueForKeyPath:@"coordinates.latitude"]doubleValue]]; 

     NSNumber * longitude = [NSNumber numberWithDouble:[[cityDictionary valueForKeyPath:@"coordinates.longitude"]doubleValue]]; 


    CLLocation *listingLocation = [[CLLocation alloc] initWithLatitude:latitude longitude:longitude]; 

Tôi nhận được lỗi sau trên dòng # 3 trên:Sending 'NSNumber * __ mạnh' đến tham số của loại 'CLLocationDegrees' không tương thích (aka 'đúp')

Sending 'NSNumber *__strong' to parameter of incompatible type 'CLLocationDegrees' (aka 'double') 

Tôi biết đó là vì Tôi đang cố gắng để vượt qua một NSNumber đến một nơi mà nó mong đợi một đôi. Nhưng đúc không hoạt động do ARC?

+0

Lưu ý rằng bạn không thực sự đúc bất cứ điều gì trong mã đó. (Nó sẽ không giúp ích gì nếu bạn đã làm, nhưng về mặt xác định vấn đề hiện tại, không phải vậy.) –

+0

không chắc chắn ai đang bỏ phiếu, nhưng rõ ràng ai đó đang chán. Tôi đã cố gắng để upvote tất cả những người trả lời – milof

Trả lời

3

Cuộc gọi đến [cityDictionary valueForKeyPath:@"coordinates.latitude"] đã cung cấp cho bạn đối tượng NSNumber. Tại sao lại chuyển đổi thành gấp đôi và sau đó tạo một NSNumber mới?

Bạn chỉ có thể làm:

NSNumber *latitude = [cityDictionary valueForKeyPath:@"coordinates.latitude"]; 
NSNumber *longitude = [cityDictionary valueForKeyPath:@"coordinates.longitude"]; 
CLLocation *listingLocation = [[CLLocation alloc] initWithLatitude:[latitude doubleValue] longitude:[longitude doubleValue]]; 

Nếu nó quay ra rằng [cityDictionary valueForKeyPath:@"coordinates.latitude"] được thực sự trả lại một NSString và không phải là một NSNumber, sau đó làm điều này:

CLLocationDegrees latitude = [[cityDictionary valueForKeyPath:@"coordinates.latitude"] doubleValue]; 
CLLocationDegrees longitude = [[cityDictionary valueForKeyPath:@"coordinates.longitude"] doubleValue]; 
CLLocation *listingLocation = [[CLLocation alloc] initWithLatitude:latitude longitude:longitude]; 
2

Bạn đang gửi loại NSNumber đến tham số gấp đôi. Bạn có thể xem xét thay đổi nó thành CLLocationDegree hoặc double, nhưng nếu bạn đang sử dụng nó ở nơi khác hoặc lưu trữ nó với dữ liệu cốt lõi, tôi sẽ để nó là NSNumber.

CLLocation *listingLocation = [[CLLocation alloc] initWithLatitude:[latitude doubleValue] longitude:[longitude doubleValue]];