ios - 核心数据 : error: Failed to call designated initializer on NSManagedObject class

标签 ios swift core-data swift2

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

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)
}

最佳答案

问题是这一行:

var uneInstanceEntity = ProduitEntity()

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

var uneInstanceEntity: ProduitEntity!

关于ios - 核心数据 : error: Failed to call designated initializer on NSManagedObject class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38006905/

相关文章:

ios - Objective-C 到 Swift : Pass Completion Handler

ios - 核心数据考验

ios - 以随机时间间隔定期将节点添加到场景中

UIWebView 中的 iOS iFrame 使用基本身份验证但没有弹出窗口显示?

ios - 我有一个类我想要一些方法转移到数组的对象

ios - 以编程方式移动按钮不起作用 - Swift

ios - 尝试让按钮与 TextField iOS 配合使用

swift - 将数据写入具有持久存储的文件,swift

swift - 即使在删除后,核心数据命令也会使 ViewController 崩溃

ios - UISegmentedControl CoreData 绑定(bind)错误