CoreData:错误:无法在 NSManagedObject 类上调用指定的初始化程序

Posted

技术标签:

【中文标题】CoreData:错误:无法在 NSManagedObject 类上调用指定的初始化程序【英文标题】:CoreData: error: Failed to call designated initializer on NSManagedObject class 【发布时间】:2016-06-24 06:29:35 【问题描述】:

我做了一些研究,但我真的不明白这里发生了什么。 当我在表格视图中选择一行时出现此错误:

Wish[1392:37721] CoreData:错误:无法调用 NSManagedObject 类“Wish.ProduitEntity”上的指定初始化程序 (lldb)

错误出现在 ViewController 类中的 prepareForSegue 方法上。

感谢您的帮助

import UIKit
import CoreData

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate 

@IBOutlet weak var leTbleView: UITableView!

var arrayProduit = [ProduitEntity]()

var produitSelectionne : ProduitEntity? = nil

override func viewDidLoad() 
    super.viewDidLoad()
    self.leTbleView.dataSource = self
    self.leTbleView.delegate = self


override func viewWillAppear(animated: Bool) 
    let context = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
    let request = NSFetchRequest(entityName: "ProduitEntity")
    var ilStock = [AnyObject]?()

    do
        try ilStock = context.executeFetchRequest(request)
     catch _ 
    


    //put info in the tableView
    if ilStock != nil 
        arrayProduit = ilStock as! [ProduitEntity]
    
    self.leTbleView.reloadData()



func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    return arrayProduit.count



func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
    let cell = UITableViewCell()
    cell.textLabel!.text = (arrayProduit[indexPath.row]).nom
    return cell



func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 
    produitSelectionne = self.arrayProduit[indexPath.row]
    performSegueWithIdentifier("detailSegue", sender: self)



override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
    if segue.identifier == "detailSegue" 
        let detailVC = segue.destinationViewController as! DetailViewController
        detailVC.uneInstanceEntity = self.produitSelectionne!





import UIKit
import CoreData

class DetailViewController: UIViewController 

@IBOutlet weak var titleLbl: UILabel!

@IBOutlet weak var storeLbl: UILabel!

@IBOutlet weak var imageProduit: UIImageView!



var uneInstanceEntity = ProduitEntity()

override func viewDidLoad() 
    super.viewDidLoad()
    self.titleLbl.text = uneInstanceEntity.nom
    self.storeLbl.text = uneInstanceEntity.magasin






import UIKit
import CoreData

class ajouterProduitViewController: UIViewController 

@IBOutlet weak var modelTxtField: UITextField!

@IBOutlet weak var magasinTxtField: UITextField!

@IBOutlet weak var photoImage: UIImageView!


override func viewDidLoad() 
    super.viewDidLoad()



//Add a new product 
func sauvegardeProduit() 
    let context = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
    let objetEntity = NSEntityDescription.insertNewObjectForEntityForName("ProduitEntity", inManagedObjectContext: context) as!ProduitEntity

    objetEntity.nom = modelTxtField.text
    objetEntity.magasin = magasinTxtField.text
    //objetEntity.unVisuel = UIImageJPEGRepresentation(UIImage(named: ""), 1)

    do 
        try context.save()
     catch _ 
    



@IBAction func saveBtn(sender: AnyObject) 
    sauvegardeProduit()
    self.dismissViewControllerAnimated(true, completion: nil)



@IBAction func cnclBtn(sender: AnyObject) 
    self.dismissViewControllerAnimated(true, completion: nil)

【问题讨论】:

【参考方案1】:

问题出在这一行:

var uneInstanceEntity = ProduitEntity()

因为您正在直接创建一个实例。你不应该这样做,你应该让它成为可选的或强制的:

var uneInstanceEntity: ProduitEntity!

【讨论】:

非常感谢韦恩!现在我将更仔细地研究这一点,以了解那里发生了什么。

以上是关于CoreData:错误:无法在 NSManagedObject 类上调用指定的初始化程序的主要内容,如果未能解决你的问题,请参考以下文章

在 NSManagedObject 类中初始化 @NSManaged 变量?

在 Core Data 中,NSManaged 对象上的 URI 属性类型应该用于啥?

对于 @NSManaged 变量,fileprivate 是不是足够?

存储的属性需要一个初始值或者应该是@NSManaged

PHPhotos 和核心数据。 PHObject 使用啥 NSManaged 对象类型?

分配给@NSManaged public var locks UI