2010-05-27 69 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