核心数据 - 由于未捕获的异常“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 实体访问属性,例如latlong

【讨论】:

以上是关于核心数据 - 由于未捕获的异常“NSUnknownKeyException”而终止应用程序的主要内容,如果未能解决你的问题,请参考以下文章

(Swift 3) 父子上下文崩溃核心数据 (libc++abi.dylib: 以 NSException (Recorded Frame) 类型的未捕获异常终止)

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[Home isEqualToString:]

iPhone核心数据示例产生异常

当我运行我的 cpp 文件时,由于未捕获的异常而终止应用程序

由于未捕获的异常“NSRangeException”而导致应用程序终止