2014-03-02 23 views
1

我的應用程序跟蹤用戶採取的路線,然後創建一個MKPolyline,每當用戶位置發生變化時顯示所採取的路線。存儲路線採用

我的下一步是存儲所採取的路線並保存,以便用戶可以查看稍後採取的路線(類似於runkeeper和其他GPS跟蹤應用程序)。

我一直在爲此奮鬥了幾天。首先,我開始考慮將位置數組存儲到NSUserDefaults中。爲此,我首先將單個數組對象轉換爲NSValue,但很快發現NSValues不適合存儲在NSUserDefaults中。我認爲我是對的,我可以將座標值存儲到NSData中存儲在NSUserDefaults中,但我不太確定這是如何完成的。

經過更多的研究,我認爲我已經決定將座標存儲到核心數據中。但是我在嘗試使用Core Data時第一次遇到了幾個問題。我會將座標存儲爲緯度和經度雙精度值的個別屬性嗎?或者我可以將它們存儲爲數組?然後我也不確定我將如何重新創建CLLocationCoordinate2D來重建MKpolyline。

對不起的問題 - 我一直堅持這一段時間,現在它的驅動我稍微攪動瘋狂!

感謝

回答

0

當創建從CLLocationCoordinate2D數組的MKPolyline,你將使用C風格的數組,因此使用這種方法

+ (instancetype)polylineWithCoordinates:(CLLocationCoordinate2D *)coords count:(NSUInteger)count 

意味着什麼地方,你有這樣的聲明:

CLLocationCoordinate2D coords[SIZE]; 

您可以將C風格的數組,並直接從NSData,而不困擾或NSValue

NSData *coordsData = [NSData dataWithBytes:coords length:SIZE*sizeof(CLLocationCoordinate2D)] 
.... 
CLLocationCoordinate2D *coords = [coordsData bytes]; 

這可能是最簡單的方式 - 你的數組轉換爲NSData進行保存,讀取數據時其轉換回。獲得座標數組後,您可以重新創建MKPolyLine

無論你使用NSUserDefaults還是核心數據都不重要,只要數據編碼去,因爲NSData與任何一個工作一樣好。這個決定取決於你的應用程序將擁有多少數據,以及你將如何使用這些數據。