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 是不是足够?