【问题标题】:Core Data - Terminating app due to uncaught exception 'NSUnknownKeyException'核心数据 - 由于未捕获的异常“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 没有下标成员”

标签: ios swift


【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-17
      • 2012-01-04
      • 2016-08-20
      • 1970-01-01
      • 2017-11-08
      • 2012-06-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多