如何在Swift中为NSManagedObject子类创建指定的初始值设定项? [英] How to make a designated initializer for NSManagedObject subclass in Swift?
本文介绍了如何在Swift中为NSManagedObject子类创建指定的初始值设定项?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
class Alternative: NSManagedObject {
@NSManaged var text: String
@NSManaged var isCorrect: Bool
@NSManaged var image: NSData
}
convenience init(text: String, isCorrect: Bool, entity: NSEntityDescription, insertIntoManagedObjectContext context: NSManagedObjectContext!) {
let alternative = Alternative(entity: entity, insertIntoManagedObjectContext: context) as Alternative
alternative.text = text
alternative.isCorrect = isCorrect
return alternative
}
我想创建一个让我通过此调用初始化新对象的方法:
I want to make a method that lets me initialize new objects with this call:
let newAlternative = Alternative("third platform", True, entityDescription, managedObjectContext)
但是我得到错误:
Convenience initializer for Alternative must delegate with self.init
做什么我需要更改我的initalizer以使我的示例使用工作吗?
What do i need to change in my initalizer to make my example usage work?
推荐答案
便利初始化程序必须在<$上调用指定的初始化程序c $ c> self :
A convenience initializer must call the designated initializer on self
:
convenience init(text: String, isCorrect: Bool, entity: NSEntityDescription, insertIntoManagedObjectContext context: NSManagedObjectContext!) {
self.init(entity: entity, insertIntoManagedObjectContext: context)
self.text = text
self.isCorrect = isCorrect
}
将被称为
let newAlternative = Alternative(text: "third platform", isCorrect: true,
entity: entityDescription, insertIntoManagedObjectContext: managedObjectContext)
此外,您还可以将实体描述的创建移动到便利初始化器中,而不是将其作为参数传递(由
Mundi的答案推动):
In addition, you could also move the creation of the entity description into the convenience initializer instead of passing it as an argument (as motivated by Mundi's answer):
convenience init(text: String, isCorrect: Bool, insertIntoManagedObjectContext context: NSManagedObjectContext!) {
let entity = NSEntityDescription.entityForName("Alternative", inManagedObjectContext: context)!
self.init(entity: entity, insertIntoManagedObjectContext: context)
self.text = text
self.isCorrect = isCorrect
}
这篇关于如何在Swift中为NSManagedObject子类创建指定的初始值设定项?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文