CoreData:错误:无法在NSManagedObject自定义类上调用指定的初始值设定项

时间:2016-05-23 18:50:19

标签: swift core-data

当我调用函数CacheStation时,我收到错误:CoreData:error:无法在NSManagedObject类SaveModel上调用指定的初始化程序。更不用说了。我该如何解决这个问题?

SaveModel.swift:

import UIKit

class ViewController: UIViewController {

    @IBAction func saveShizzle(sender: AnyObject) {
        let sm = SaveModel();
        sm.CacheStations();
    }
}

SaveModel + CoreDataProperties.swift:

{{1}}

我在哪里调用CacheStations:

{{1}}

2 个答案:

答案 0 :(得分:1)

这一行:

let sm = SaveModel();

使用标准init()方法创建SaveModel的实例,但NSManagedObjects 必须使用指定的初始值进行初始化:

init(entity entity: NSEntityDescription, insertIntoManagedObjectContext context: NSManagedObjectContext?)

(或者,如在您的CacheStations方法中,使用调用指定初始值的NSEntityDescription.insertNewObjectForEntityForName(_, inManagedObjectContext: moc))。

由于似乎创建sm只是为了有一个实例可以调用CacheStations,我会将该方法更改为类方法:

class func CacheStations(){

并更改您的saveShizzle方法以使用类方法:

@IBAction func saveShizzle(sender: AnyObject) {
    SaveModel.CacheStations();
}

答案 1 :(得分:0)

以下是发生的事情:

  1. 当您致电let sm = SaveModel();时,您正在创建SaveModel
  2. 的新实例
  3. SaveModelNSManagedObject
  4. 的子类
  5. NSManagedObject有一个名为init(_: insertIntoManagedObjectContext:)
  6. 的指定初始化程序
  7. 您的子类不会添加任何类型的初始值设定项,这意味着您必须调用超类指定的初始值设定项。
  8. 您不会这样做,因此您会收到一条描述确切问题的错误消息。
  9. 您需要调用NSManagedObject指定的初始值设定项或创建自己的指定初始值设定项,以调用超类指定的初始化程序。