如何从使用NSNotification发布的对象中获取double值

时间:2013-10-22 00:12:30

标签: ios objective-c

我遇到从NSObject中提取double的问题。 我收到了这样的通知

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 for post是

(entity:Post; id:0x85e9820; data:{     created =“2013-10-08 16:25:36 +0000”;     lat =“ - 33.886336”;     lng =“151.209565”;     “post_id”= 2418; })

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

编辑:当我尝试使用[post.lat doubleValue]时,它会收到一个错误,导致无法构建“Bad receiver type'double'”

答案:我需要像这样提取值

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

3 个答案:

答案 0 :(得分:0)

取决于什么类“lat”。如果它是NSNumber,那么执行[post.lat doubleValue]

编辑,根据您更新的问题,我们现在看到Post.lat确实是双倍的。但是,正如@ St3fan指出实体输出中的双引号使得它看起来好像该值是一个字符串。所以你有一个双重的NaN用于属性和另一个lat变量,它是一个看起来像的字符串。两个独立的变量。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

也许你可以这样试试:

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

然后得到这样的位置:

NSDictionary *location = notification.object;