将“NSNumber *__strong”发送到不兼容类型“CLLocationDegrees”(又名“double”)的参数
Posted
技术标签:
【中文标题】将“NSNumber *__strong”发送到不兼容类型“CLLocationDegrees”(又名“double”)的参数【英文标题】:Sending 'NSNumber *__strong' to parameter of incompatible type 'CLLocationDegrees' (aka 'double') 【发布时间】:2012-11-17 18:01:33 【问题描述】: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,投射无法正常工作?
【问题讨论】:
请注意,您实际上并没有在该代码中转换任何内容。 (如果你这样做也没有用,但就识别当前问题而言,不是这样。) 不确定谁投反对票,但很明显有人很无聊。我试图为所有回答的人投票 【参考方案1】:对[cityDictionary valueForKeyPath:@"coordinates.latitude"]
的调用已经为您提供了一个NSNumber
对象。为什么将其转换为双精度然后创建一个新的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];
【讨论】:
【参考方案2】:您将类型 NSNumber 发送到 double 参数。您可以考虑将其更改为 CLLocationDegree
's 或 double
,但如果您在其他地方使用它或将其与核心数据一起存储,我会将其保留为 NSNumber
。
CLLocation *listingLocation = [[CLLocation alloc] initWithLatitude:[latitude doubleValue] longitude:[longitude doubleValue]];
【讨论】:
以上是关于将“NSNumber *__strong”发送到不兼容类型“CLLocationDegrees”(又名“double”)的参数的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 webhook 将 heroku 日志发送到不和谐?
将“void”发送到不兼容类型“UIViewController”的参数