如何从使用 NSNotification 发布的对象中获取双精度值



我在从 NSObject 中提取双精度时遇到问题。我收到这样的通知

NSString *key = @"Post";
NSDictionary *dictionary = [notification userInfo];
Post* post = [dictionary objectForKey:key];
CLLocationCoordinate2D zoomLocation;
zoomLocation.latitude = post.lat;
zoomLocation.longitude = post.lng;
NSLog(@"%f", post.lat);
NSLog(@"%@", post);

post.lat 的 NSLog 是 nan。邮政的 NSLog 是

(实体:邮政;编号:0x85e9820;数据:{ 创建 = "2013-10-08 16:25:36 +0000"; 纬度 = "-33.886336"; 液化天然气 = "151.209565"; "post_id" = 2418;})

希望这是我错过的非常简单的东西。提前谢谢。

编辑:当我尝试使用[post.lat doubleValue]时,它得到一个错误,阻止构建"错误的接收器类型'double'"

答:我需要像这样提取值

[[post valueForKey:@"lat"] doubleValue];

我在 lat 和 png 的值周围看到双引号。这可能意味着这些值实际上是字符串而不是数字。

如果是这种情况,则可以使用 NSString#doubleValue 来获取与 CLLocationCoordinate2D.latitude/longitude 兼容的转换数值。

也许你可以这样尝试:

NSDictionary *location = @{@lat,@lng};
[[NSNotificationCenter defaultCenter] postNotificationName:@"NOTIFICATION" object:location];

然后像这样获取位置:

NSDictionary *location = notification.object; 

取决于"lat"是什么类。 如果它是一个NSNumber,那么[post.lat doubleValue]

编辑:从您更新的问题中,我们现在看到Post.lat确实是双重的。但是,正如@St3fan指出的那样,实体输出中的双引号使该值看起来好像是一个字符串。因此,您有一个启动到 NaN 并用于属性的双精度值和另一个看起来是一个字符串的 lat 变量。两个单独的变量。

最新更新