将'NSNumber * __ strong'发送到不兼容类型'CLLocationDegrees'(又名'double')的参数

时间:2012-11-17 18:01:34

标签: ios cllocation

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];

我在上面的第3行收到以下错误:

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

我知道这是因为我正在尝试将NSNumber传递给预期会有双倍的地方。但由于ARC,铸造工作不起作用?

2 个答案:

答案 0 :(得分:3)

[cityDictionary valueForKeyPath:@"coordinates.latitude"]的调用已经为您提供了NSNumber个对象。为什么要将其转换为double,然后创建新的NSNumber

你可以这样做:

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

如果事实证明[cityDictionary valueForKeyPath:@"coordinates.latitude"]实际上正在返回NSString而不是NSNumber,那么请执行以下操作:

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

答案 1 :(得分:2)

您正在将类型NSNumber发送到double参数。您可以考虑将其更改为CLLocationDegreedouble,但如果您在其他地方使用它或将其与核心数据一起存储,我会将其保留为NSNumber

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