从Core Data创建一个CLLocation坐标数组

时间:2015-03-25 07:11:13

标签: arrays swift core-data cllocation

也许我无法找到这个问题的答案,因为它非常简单,我应该能够弄清楚,但我很难过。哦,如果我的某些术语不合适而道歉 - 我还在学习。

我使用Swift并拥有一个源自Core Data的数组。到现在为止还挺好。该阵列中的两个元素是存储纬度和经度的双打/ NSNumber。我将使用这两个元素来绘制地图,但我无法弄清楚如何将这两个元素放入他们自己的CLLocations数组中。

所以,我已经获得了Core Data中所有数据的数组:

var locationsList: [Locations] = []

 var context = (UIApplication.sharedApplication().delegate as AppDelegate).managedObjectContext!
    var request = NSFetchRequest(entityName: "Locations")
    let pred = NSPredicate(format: "game = %d", passedGameNumber)
    request.predicate = pred
    request.sortDescriptors = [NSSortDescriptor(key:"time", ascending: false)]
    self.locationsList = context.executeFetchRequest(requestMap, error: nil)! as [Locations]

但它包含Core Data中所有内容的数据(按游戏过滤):

class Locations: NSManagedObject {

@NSManaged var game: NSNumber
@NSManaged var time: NSDate
@NSManaged var latitude: NSNumber
@NSManaged var longitude: NSNumber

}

我只需要一个包含纬度和经度的数组,我需要将其转换为CLLocation以放置在地图上。我应该把地图部分弄清楚 - 只是这个阵列让我摸不着头脑!感谢。

3 个答案:

答案 0 :(得分:3)

想出来。在迭代核心数据数组的for循环之上,我还必须将纬度和经度转换为双打,然后将它们作为CLLocationCoordinate2D附加到我的新数组。

var coordinates: [CLLocationCoordinate2D] = []

for index in 0..<self.locationsList.count{
        var lat = Double(self.locationsList[index].latitude)
        var long = Double(self.locationsList[index].longitude)
        var coordinatesToAppend = CLLocationCoordinate2D(latitude: lat, longitude: long)
        coordinates.append(coordinatesToAppend)
    }

答案 1 :(得分:1)

好的解决方案亚当......我能够做类似的事情......

声明这些全局变量

 var longitudeCollection: [String] = [String]()
 var latitudeCollection: [String] = [String]()

扩展以轻松访问CLLoationDegrees类型为Double

extension String {
var coordinateValue: CLLocationDegrees {
    return (self as NSString).doubleValue
    }
}

然后这就是你如何追加坐标

for var index = 0; index<=longitudeCollection.count-1; index++ {
  var lat = latitudeCollection[index].coordinateValue
  var long = longitudeCollection[index].coordinateValue

  var coordinatesToAppend = CLLocationCoordinate2D(latitude: lat, longitude: long)
  coordinates.append(coordinatesToAppend)
}

答案 2 :(得分:0)

您不需要使用NSNumber来存储纬度和经度点。您可以将CLLocation直接存储到核心数据中。

为每个CLLocation设置一个实体,无论实体使用位置点,它都是一个太多的关系。我们称之为LocationPoint:

class LocationPoint: NSManagedObject {

@NSManaged var game: NSNumber
@NSManaged var time: NSDate
@NSManaged var location: AnyObject

}

然后将 location 属性设置为可在Xcode数据模型中转换。那就是它!

在Objective-c中,您实际上仍然可以将此LocationPoint属性声明为CLLocation而不会出现任何错误:

@property (nonatomic, strong) CLLocation *location