簡體   English   中英

CoreData:錯誤:無法在NSManagedObject類上調用指定的初始化程序

[英]CoreData: error: Failed to call designated initializer on NSManagedObject class

我做了一些研究,我真的不明白這里發生了什么。 我在表視圖中選擇一行時出現此錯誤:

希望[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!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM