CoreData:error:无法调用NSManagedObject自定义类上的指定初始化程序
问题描述:
当我调用函数CacheStation时,出现错误:CoreData:error:无法调用NSManagedObject类SaveModel上的指定初始值设定项。没有什么比这更少。我该如何解决这个问题?CoreData:error:无法调用NSManagedObject自定义类上的指定初始化程序
SaveModel.swift:
import Foundation
import CoreData
import UIKit
class SaveModel: NSManagedObject {
func CacheStations(){
// create an instance of our managedObjectContext
let moc = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
// we set up our entity by selecting the entity and context that we're targeting
let entity = NSEntityDescription.insertNewObjectForEntityForName("CachedStations", inManagedObjectContext: moc) as! SaveModel
//add the data
entity.land = "nl";
// we save our entity
do {
try moc.save()
} catch {
fatalError("Failure to save context: \(error)")
}
}
SaveModel + CoreDataProperties.swift:
import Foundation
import CoreData
extension SaveModel {
@NSManaged var land: String?
}
当我打电话CacheStations:
import UIKit
class ViewController: UIViewController {
@IBAction func saveShizzle(sender: AnyObject) {
let sm = SaveModel();
sm.CacheStations();
}
}
答
这条线:
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();
}
答
这里发生了什么:
- 当您致电
let sm = SaveModel();
时,您正在创建SaveModel
的新实例。 -
SaveModel
是NSManagedObject
-
NSManagedObject
一个子类有一个叫指定初始化init(_: insertIntoManagedObjectContext:)
- 子类中不添加任何类型的,这意味着你必须调用父类的指定初始化的任何初始化。
- 你不这样做,所以你会得到一个错误消息,描述确切的问题。
您需要可以致电NSManagedObject
指定初始化或创建自己指定的初始化,调用父类指定初始化。
请您可以显示代码在哪里调用CacheStations? – pbasdf
@pbasdf添加了代码,我更进了一步,它让崩溃让sm = SaveModel(); – da1lbi3