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,铸造工作不起作用?
答案 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参数。您可以考虑将其更改为CLLocationDegree
或double
,但如果您在其他地方使用它或将其与核心数据一起存储,我会将其保留为NSNumber
。
CLLocation *listingLocation = [[CLLocation alloc] initWithLatitude:[latitude doubleValue] longitude:[longitude doubleValue]];