将“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”的参数

将计算机信息发送到不和谐机器人

initWithStyle:CGRectZero 将“const CGRect”发送到不兼容类型的参数

如何使用谷歌助手 IFTTT 将 webhook 发送到不和谐