2016-06-24 8 views
0

私はいくつかの調査を行いましたが、実際に何が起こったのか分かりません。 Iは、テーブルビューの行を選択したとき、私はこのエラーを持っている:コアデータ:エラー:NSManagedObjectクラスで指定された初期化子を呼び出すことができませんでした

ウィッシュ[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) 
} 

}

答えて

5

ため

おかげで問題は、この行です:

var uneInstanceEntity = ProduitEntity() 

あなたは、直接インスタンスを作成しているので。あなたはそれを行うべきではありません、あなたはそれをオプションにするか強制する必要があります:

var uneInstanceEntity: ProduitEntity! 
+0

ありがとうございました!ここでは、これをさらに詳しく見て、そこで何が起こるかを理解します。 – Sylvain

関連する問題