2010-05-27 47 views
0

这是我的情况。由于某些原因,保存在核心数据中的我的注释坐标似乎与我可以从地图上的针位置检索到的坐标相匹配。iPhone Mapkit:保存在核心数据中的注释坐标不一致

所以,我使用的东西就像我的数据保存到核心数据:

[ride setLatitude:[NSNumber numberWithDouble:newRidePlacemark.coordinate.latitude]]; 
[ride setLongitude:[NSNumber numberWithDouble:newRidePlacemark.coordinate.longitude]]; 

我敢肯定,是拯救长,纬度合适的格式,但是,当我比较出现的问题将我在核心数据中的坐标与所放置的引脚的坐标进行协调。我使用的方法,并登录到引脚是什么位置在:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control 

NSLog(@"%f, %f", view.annotation.coordinate.latitude, view.annotation.coordinate.longitude); 

这给了我这样的:

38.119432,-122.225647

但是,在那同时,我我检查什么是保存在核心数据,该引脚,我有:

38.11943249695161,-122.2256469726562

差异从哪里来?为什么缩短?这是一个真正的问题,因为当我尝试删除注释时,坐标不匹配,注释不会被删除。

我在这里错过了什么吗?

回答

2

首先,您需要确保您在整个数据流中始终使用double类型(64位)。如果数据暂时转换为float(32位),则将失去精度。如果您使用plist存储核心数据作为后端数据,则实际上可能会将其暂时转换为其他数据表示形式,如文本字符串。

其次,在比较一般的浮点数时应该小心。不要比较这些值是否相等,而应根据所需的精度允许一些微小的差异,例如,

if(fabs(num1 - num2) <= 0.000001) { 
// numbers are considered equal 
} 

希望这会有所帮助。

+0

好吧,看来我保持这个数字是整个时间的两倍。这个号码本身并没有改变,只是缩短了。 – 2010-05-27 14:26:10

+0

听起来像这可能是你的核心数据模式不存储为64位浮点,但32位的问题。 – 2010-05-27 19:37:05

+0

但我把它们保存为double,而不是整数32或64。 – 2010-05-27 19:57:42