Swift - 无法将核心数据转换为 url 参数
Posted
技术标签:
【中文标题】Swift - 无法将核心数据转换为 url 参数【英文标题】:Swift-Can't convert core data to url parameters 【发布时间】:2018-12-18 07:58:39 【问题描述】:我正在尝试构建一个跟踪设备位置的小应用程序。所以将位置保存到核心数据中。但无法将其转换为 json 以将此信息发送到服务器。我收到以下错误
2018-12-18 13:08:33.583580+0530 My App[6696:144278] [General] 引发了未捕获的异常。
2018-12-18 13:08:33.583605+0530 我的应用程序[6696:144278] [常规] JSON 写入中的类型无效 (__NSDate)。
2018-12-18 13:08:33.604814+0530 我的应用[6696:144278] [常规] ( 0 CoreFoundation 0x00007fff4af112db __exceptionPreprocess + 171 ........)
从核心数据加载数据
func loadingFromCoreData() -> [String:Dictionary<String,AnyObject>]
var locationsArray: [String:Dictionary<String,AnyObject>] = [:]
var count = 0
if let context = (NSApplication.shared.delegate as? AppDelegate)?.persistentContainer.viewContext
do
locationDataInstance = try context.fetch(LocationInformation.fetchRequest())
catch
print("IN Loading From database")
for locationDI in locationDataInstance
var location_info: [String:AnyObject]=[:]
location_info["latitude"] = locationDI.latitude as AnyObject
location_info["longitude"] = locationDI.longitude as AnyObject
location_info["timestamp"] = locationDI.timestamp as AnyObject
locationsArray["\(count)"] = location_info
count = count + 1
return locationsArray
字典到 Json 覆盖
let parameters:Dictionary<String,AnyObject> = ["name":devicename as AnyObject,"loctioninfo":loadingFromCoreData() as AnyObject]
do
let js = try JSONSerialization.data(withJSONObject: parameters, options: .prettyPrinted)
print(js)
catch
print(error.description)
【问题讨论】:
【参考方案1】:错误很明显:timestamp
的类型显然是Date
,而 JSON 不支持这种类型。
例如添加一个计算属性以将Date
对象转换为 UNIX 时间戳或日期字符串
var unixTimeStamp : Double
return timestamp.timeIntervalSince1970
并通过将字典声明为 [String:Any]
来摆脱这个丑陋的 as AnyObject
演员表
【讨论】:
以上是关于Swift - 无法将核心数据转换为 url 参数的主要内容,如果未能解决你的问题,请参考以下文章
Swift - NSJsonSerialization - “无法将数据转换为围绕字符的字符串”错误
Swift 3 核心数据 - NSExpression forFunction:“sum:”抛出错误(“无法将字典转换为 Day”)
无法将“UserInfoEntity!.Type”类型的值转换为预期的参数类型“NSEntityDescription”
firebase swift 3 转换:无法将类型“(_)->()”的值转换为预期的参数类型“((错误)-> Void)?