核心数据 - 由于未捕获的异常“NSUnknownKeyException”而终止应用程序
Posted
技术标签:
【中文标题】核心数据 - 由于未捕获的异常“NSUnknownKeyException”而终止应用程序【英文标题】:Core Data - Terminating app due to uncaught exception 'NSUnknownKeyException' 【发布时间】:2017-02-08 13:14:13 【问题描述】:我正在尝试在 ios 中快速检索我的 xcdatamodel 的数据元素 文件
看看:
@IBAction func sees(_ sender: Any)
let appdel = UIApplication.shared.delegate as! AppDelegate
let contect:NSManagedObjectContext = appdel.persistentContainer.viewContext
var results = NSManagedObject()
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Places")
let records = try! contect.execute(fetchRequest)
let getlatitude = records.value(forKey: "lat")
let getlongitude = records.value(forKey: "long")
print("getted: \(getlatitude) \(getlongitude)")
我的 xcdatamodel 文件看起来如何
我遇到了崩溃:
2017-02-08 14:10:21.330293 派克[6398:1283817] [LogMessageLogging] 6.1 无法检索运营商名称。 CTError: domain-2, code-5, errStr:((os/kern) failure) 2017-02-08 14:10:24.404130 Parkar [6398:1283769] [error] 错误:CoreData:错误:调用失败 NSManagedObject 类 'NSManagedObject' 上的指定初始化程序 CoreData:错误:CoreData:错误:调用指定失败 NSManagedObject 类 'NSManagedObject' 上的初始化程序
2017-02-08 14:10:24.410434 Parkar[6398:1283769] *** 终止应用 由于未捕获的异常 'NSUnknownKeyException',原因: '[valueForUndefinedKey:]: 这个 类与键 lat 的键值编码不兼容。'
【问题讨论】:
试试 records[0].value(forKey: "lat") as!浮动 不,我无法编译它,因为在 Xcode 的右侧我有“类型 NSPersistentStoreResut 没有下标成员” 【参考方案1】:试试这个代码,它对我有用
let fetch = NSFetchRequest<NSFetchRequestResult>()
// Create Entity Description
let entityDescription = NSEntityDescription.entity(forEntityName: "Places", in: self.managedObjectContext)
// Configure Fetch Request
fetch.entity = entityDescription
do
let result = try self.managedObjectContext.fetch(fetch)
var orderList :NSArray = result
let lat = orderList.value(forKey: "lat") as! String
let long = orderList.value(forKey: "long") as! String
catch
let fetchError = error as NSError
print(fetchError)
【讨论】:
【参考方案2】:这是我设法整合的一个可行的解决方案:
let appdel = UIApplication.shared.delegate as! AppDelegate
let context:NSManagedObjectContext = appdel.persistentContainer.viewContext
var results = NSManagedObject() //not sure what this is used for
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Places")
do
let records = try context.fetch(fetchRequest) as! [Places]
let placeObject = records[0]
let lat = placeObject.lat
let long = placeObject.long
print("\(lat) \(long)")
catch
print(error.localizedDescription)
首先,我将contect
更改为正确的单词context
。接下来,我们必须用catch
包围我们的try
语句以捕获任何错误。然后我将records
变量从Core Data 中的实体转换为Places
数组。现在您可以从Places
实体访问属性,例如lat
和long
。
【讨论】:
以上是关于核心数据 - 由于未捕获的异常“NSUnknownKeyException”而终止应用程序的主要内容,如果未能解决你的问题,请参考以下文章
(Swift 3) 父子上下文崩溃核心数据 (libc++abi.dylib: 以 NSException (Recorded Frame) 类型的未捕获异常终止)
由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序
由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[Home isEqualToString:]