【问题标题】:Swift CoreData: Failed to call designated initializer on NSManagedObjectSwift CoreData:无法在 NSManagedObject 上调用指定的初始化程序
【发布时间】:2023-03-12 11:16:01
【问题描述】:

我在使用 Core Data 对象获取数据时遇到问题。

这是用于获取数据的代码

let fetchRequest = NSFetchRequest(entityName: "Country")

        var countries = [Country!]()

        do {
            countries = try self.managedObjectContext!.executeFetchRequest(fetchRequest) as! [Country!]
        } catch {
            // Replace this implementation with code to handle the error appropriately.
            // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
            let nserror = error as NSError
            NSLog("Unresolved error \(nserror), \(nserror.userInfo)")
            abort()
        }

这是模型定义

import Foundation
import CoreData

@objc(Country)
class Country: NSManagedObject
{

.....
}

这是模型的扩展

import Foundation
import CoreData

extension Country {

    @NSManaged var countryCode: String?
    @NSManaged var dialCode: String?
    @NSManaged var name: String?

}

我收到以下错误:

CoreData: error: Failed to call designated initializer on NSManagedObject class 'Country' 
fatal error: unexpectedly found nil while unwrapping an Optional value

这条线断了:

countries = try self.managedObjectContext!.executeFetchRequest(fetchRequest) as! [Country!]

我不确定我是否理解这里的问题。有人可以建议吗?

谢谢!

【问题讨论】:

  • 这可能是因为您在某处有一个变量声明,类似于var myObject = Country()。这不仅声明了变量,它还使用默认初始化程序(init)创建了一个实例,而 NSManagedObjects(和子类)必须使用指定的初始化程序进行初始化:initWithEntity:insertIntoManagedObjectContext:。将其声明为 var myObject : Country

标签: ios swift core-data


【解决方案1】:

把这两行的感叹号分别去掉就行了

var countries = [Country]()

countries = try self.managedObjectContext!.executeFetchRequest(fetchRequest) as! [Country]

NSManagedObject 对象可以用作非可选对象。

隐式展开的可选类型(带感叹号)强制对象调用必须为initWithEntity:insertIntoManagedObjectContext:的具体初始化程序

【讨论】:

  • 感谢您的回复。但删除这两行的感叹号后,我又得到了同样的错误:CoreData: error: Failed to call designated initializer on NSManagedObject class 'Country' fatal error: unexpectedly found nil while unwrapping an Optional value
  • 你实现Country中的init()方法了吗?
  • 不,我应该实现一些特殊的init() 方法吗?或者扩展现有方法initWithEntity?谢谢!
  • 没有简单的init() 方法,指定的初始化器是强制性的。检查它是否被正确覆盖
  • 我没有重写任何初始化程序,也没有创建简单的init()。我不明白,我需要创建一些初始化程序吗?谢谢
猜你喜欢
  • 2014-10-19
  • 2013-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多