我有这个代码,我可以保存从地图视图坐标获取的纬度和经度。当应用程序启动时,我想检索这些坐标。我确实注意到,但是当我尝试检索它时,我得到的信息比我想要的要多得多。
我使用此方法检索它,并将其打印在控制台上:
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let context = appDelegate.persistentContainer.viewContext
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "GeoData")
request.returnsObjectsAsFaults = false
do
{
let results = try context.fetch(request)
if results.count > 0 {
print(results)
}
}
catch
{
//ERROR
}
但是当我这样做时,我明白了:
[<GeoData: 0x6000002876c0> (entity: GeoData; id: 0xd0000000014c0000 <x-coredata://1BDB903D-6F82-404A-A381-832E7932F832/GeoData/p83> ; data: {
myLastLocation = nil;
myLatitude = "24.16935894001965";
myLongitude = "120.9677266312395";
})]
如何再次检索数据并获得myLatitude和myLongitude的真实值?
编辑:
这是我保存它的方式:
if longPress.state == .ended
{
let touchLocation = longPress.location(in: mapView)
let coordinate = mapView.convert(touchLocation, toCoordinateFrom: mapView)
let newLocation = NSEntityDescription.insertNewObject(forEntityName: "GeoData", into: context)
newLocation.setValue(coordinate.latitude as Double, forKey: "myLatitude")
newLocation.setValue(coordinate.longitude as Double, forKey: "myLongitude")
do
{
try context.save()
}
catch
{
//ERROR
}
}
答案 0 :(得分:0)
阅读更新后的问题:
您只需要使用正确的类型声明NSFetchRequest。 我从我的代码中挑选了一些陈述(Brand是我项目中的一个模型)。
....
let brandRequest = NSFetchRequest<Brand>(entityName: "Brand")
do {
let matches = try mycontext.fetch(brandRequest)
return matches
}catch let error as NSError {
...
}
在这种情况下,您返回的匹配项是&#34;品牌&#34;对象
而且,如果您的数据模型具有许多属性,并且您只需要经度和纬度,则可以尝试NSFetchRequest.propertiesToFetch。这是我的第一个答案意味着......
答案 1 :(得分:0)
你应该像
一样 do
{
let results = try context.fetch(request) as! GeoData
if results.count > 0 {
print("\(results.myLatitude)) & \(results.myLongitude)")
}
}
catch
{
//ERROR
}
答案 2 :(得分:0)
我找到了解决方案:
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let context = appDelegate.persistentContainer.viewContext
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "GeoData")
request.returnsObjectsAsFaults = false
do
{
let results = try context.fetch(request) as! [NSManagedObject]
if results.count > 0 {
for result in results {
if let latitude = result.value(forKey: "myLatitude") as? Double {
print(latitude)
}
if let longitude = result.value(forKey: "myLongitude") as? Double {
print(longitude)
}
}
}
}
catch
{
//ERROR
}
这个正确地打印出纬度和经度而没有额外的信息。
19.7440716117355
129.099291435423