如何在Swift中为NSManagedObject子类创建指定的初始值设定项? [英] How to make a designated initializer for NSManagedObject subclass in Swift?

查看:216
本文介绍了如何在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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆