我的应用会跟踪用户所采用的路线,然后创建一个MKPolyline,每次用户位置更改时都会更新,以显示所采用的路线。
我的下一步是存储所采用的路线并将其保存,以便用户可以查看以后拍摄的路线(类似于runkeeper和其他GPS跟踪应用)。
我几天都在努力解决这个问题。首先,我开始考虑将一系列位置存储到NSUserDefaults中。为此,我首先将各个数组对象转换为NSValue,但很快发现NSValues不适合存储在NSUserDefaults中。我认为我说我可以将坐标值存储到NSData中以存储在NSUserDefaults中,但我不太确定如何完成。
经过更多的研究,我认为我已经决定将坐标存储到Core Data中。但是,在我第一次尝试使用Core Data时,我有一些关于这样做的问题。我会将坐标存储为纬度和经度双值的单独属性吗?或者我可以将它们存储为数组?然后我也不确定如何重新创建CLLocationCoordinate2D然后重建MKpolyline。
对不起一连串的问题 - 我已经坚持了一段时间了,它让我有点疯狂!
由于
答案 0 :(得分:0)
从MKPolyline
数组创建CLLocationCoordinate2D
时,您将使用C风格的数组,因此使用此方法
+ (instancetype)polylineWithCoordinates:(CLLocationCoordinate2D *)coords count:(NSUInteger)count
意味着在某个地方你有这样的声明:
CLLocationCoordinate2D coords[SIZE];
您可以直接在NSData
之间转换C样式数组,而不必费心NSArray
或NSValue
:
NSData *coordsData = [NSData dataWithBytes:coords length:SIZE*sizeof(CLLocationCoordinate2D)]
....
CLLocationCoordinate2D *coords = [coordsData bytes];
这可能是最简单的方法 - 将数组转换为NSData
以保存它,在读取时转换回来。获得坐标数组后,您可以重新创建MKPolyLine
。
无论您使用NSUserDefaults
还是核心数据,数据编码都无关紧要,因为NSData
同样适用。决定取决于您的应用程序将拥有多少数据以及您将如何使用该数据。