如何在Swift中将位置痕迹保存到CoreData

时间:2016-04-07 15:08:55

标签: swift core-data core-location

我正在尝试将用户旅程保存为CoreData中的痕迹,因此即使他们退出应用我也可以检索它。目前,下面的代码将他们的位置保存到CloudKit,但我被告知为了检索他们的痕迹,最好将其保存到Core Data。

只是想知道我是怎么做到的?

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
     let location = locations.last!
     let center = CLLocationCoordinate2D(latitude: location.coordinate.latitude, longitude: location.coordinate.longitude)
     addCrumbPoint(center)

     // Add to Cloudkit
     let locationRecord = CKRecord(recordType: "location")
     locationRecord["location"] = location
     let publicData = CKContainer.defaultContainer().publicCloudDatabase
     publicData.saveRecord(locationRecord) { 
         record, error in
     }
}

1 个答案:

答案 0 :(得分:2)

由于您只保存一个面包屑位置,因此Core Data不合适。如果你要保存一些你需要显示,搜索等的面包屑,那么它可能是有意义的。

对于单个CLLocation,请使用NSUserDefaultsCLLocation符合NSCoding,因此您需要将其转换为NSData并保存:

let locationData = NSKeyedArchiver.archivedDataWithRootObject(location)
NSUserDefaults.standardUserDefaults().setObject(locationData, forKey: "breadcrumb")

当您阅读数据时,请查看"location"的值,然后使用NSKeyedUnarchiver将其转换回CLLocation