JSON结果的setValue(纬度/经度坐标为Double)到Swift中的CoreData

Posted

技术标签:

【中文标题】JSON结果的setValue(纬度/经度坐标为Double)到Swift中的CoreData【英文标题】:setValue of JSON results (lat/lon coordinates as Double) to CoreData in Swift 【发布时间】:2015-03-19 23:13:36 【问题描述】:

我对使用 Swift 进行 ios/xCode 开发非常陌生。我正在尝试执行以下操作:

查询 JSON 结果并将值保存到 CoreData,其中将包含需要保存为双精度的纬度/经度坐标。这是我当前的 sn-p,即使项目/值设置为 NSNumber,也不允许我将 lat/lon 保存为 Double:

CoreData 设置:

Entity Attributes and type:
apCode: String
apId: String
apLat: Double
apLon: Double
apName: String
apUpdate: Date

函数 sn-p:

let jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary

           var items = [[String:AnyObject]()]
           var item:AnyObject

            for var i = 0; i < jsonResult[“jsonAirports"]!.count; i++ 

                items.append([String:AnyObject]())

                item = jsonResult[“jsonAirports"]![i] as NSDictionary 

                items[i]["AIRPORT"] = item["AIRPORT"] as? String

                items[i]["APCODE"] = item["APCODE"] as? String

                items[i]["APID"] = item["APID"] as? String

                items[i]["LAT"] = item["LAT"] as? NSNumber

                items[i]["LON"] = item["LON"] as? NSNumber

                items[i]["IMG"] = item["IMG"] as? String

                items[i]["UDATE"] = item["UDATE"] as? NSDate


                //Save to CoreData
                var addAirportItem = NSEntityDescription.insertNewObjectForEntityForName("Airports", inManagedObjectContext: context) as NSManagedObject

                addAirportItem.setValue(items[i]["AIRPORT"], forKey: "apName")                    

                addAirportItem.setValue(items[i]["APCODE"], forKey: "apCode")

                addAirportItem.setValue(items[i]["APID"], forKey: "apID")

                addAirportItem.setValue(items[i]["LAT"], forKey: "apLat")

                addAirportItem.setValue(items[i]["LON"], forKey: "apLon")

                addAirportItem.setValue(items[i]["IMG"], forKey: "apImg")

                addAirportItem.setValue(NSDate(), forKey: "apUpdate")

                context.save(nil)

            

我的目标是使用 CoreLocation 比较用户的当前位置,并使用保存的纬度/经度坐标从 CoreData 中获取相应的项目。

如何将经纬度坐标的 JSON 结果设置为在 CoreData 中保存为双精度值?

非常感谢任何帮助

八色

【问题讨论】:

这里没有问题。 对不起。标题中暗示了这一点,但我编辑并添加了问题:如何将纬度/经度坐标的 JSON 结果设置为在 CoreData 中保存为双精度值? 【参考方案1】:

我不确定,但问题似乎是您的 CoreData 模型中描述的属性与您尝试在属性上设置的值的类型之间的数据类型不匹配。

如果您的 CoreData 模型,apLatapLon 都是 String,但您尝试在 sn-p 中使用 NSNumber 设置它们。如果您在模型中将类型更改为 Double,我认为您的 sn-p 会起作用。

【讨论】:

很抱歉。 apLat 和 apLon 的模型中的数据类型已设置为 Double(上面发布不正确)。使用我包含的当前 sn-p,当我运行 func 时,CoreData 对这两个值产生 nil。

以上是关于JSON结果的setValue(纬度/经度坐标为Double)到Swift中的CoreData的主要内容,如果未能解决你的问题,请参考以下文章

这是啥纬度/经度格式?

将纬度和经度转换为 3D 空间中的点

经纬度转换成XYZ坐标

通过转换为 utm 计算纬度/经度距离与使用近似方法给出不同的结果

如何使用 cartopy 将显示坐标转换为地理坐标(纬度、经度)?

Swift:使用纬度/经度时坐标不准确