存储路线

时间:2014-03-02 12:16:03

标签: ios objective-c core-data

我的应用会跟踪用户所采用的路线,然后创建一个MKPolyline,每次用户位置更改时都会更新,以显示所采用的路线。

我的下一步是存储所采用的路线并将其保存,以便用户可以查看以后拍摄的路线(类似于runkeeper和其他GPS跟踪应用)。

我几天都在努力解决这个问题。首先,我开始考虑将一系列位置存储到NSUserDefaults中。为此,我首先将各个数组对象转换为NSValue,但很快发现NSValues不适合存储在NSUserDefaults中。我认为我说我可以将坐标值存储到NSData中以存储在NSUserDefaults中,但我不太确定如何完成。

经过更多的研究,我认为我已经决定将坐标存储到Core Data中。但是,在我第一次尝试使用Core Data时,我有一些关于这样做的问题。我会将坐标存储为纬度和经度双值的单独属性吗?或者我可以将它们存储为数组?然后我也不确定如何重新创建CLLocationCoordinate2D然后重建MKpolyline。

对不起一连串的问题 - 我已经坚持了一段时间了,它让我有点疯狂!

由于

1 个答案:

答案 0 :(得分:0)

MKPolyline数组创建CLLocationCoordinate2D时,您将使用C风格的数组,因此使用此方法

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

意味着在某个地方你有这样的声明:

CLLocationCoordinate2D coords[SIZE];

您可以直接在NSData之间转换C样式数组,而不必费心NSArrayNSValue

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

这可能是最简单的方法 - 将数组转换为NSData以保存它,在读取时转换回来。获得坐标数组后,您可以重新创建MKPolyLine

无论您使用NSUserDefaults还是核心数据,数据编码都无关紧要,因为NSData同样适用。决定取决于您的应用程序将拥有多少数据以及您将如何使用该数据。