如何解决此错误?:"使用未实现的初始化程序' init()'上课"

时间:2014-12-04 12:59:11

标签: swift realm

这是我的班级:

class Sentence: RLMObject {
    dynamic var words = RLMArray(objectClassName: Word.className())
    dynamic var content = ""

    init(content: String){
        super.init(object: content)
        self.content = content
        let wordArray = makeWordTokens(content)
    }

当我尝试创建像这样的Sentence对象时......

let sentence = Sentence(content: "你好吗?")

...我收到以下运行时错误:

fatal error: use of unimplemented initializer 'init()' for class 'MyApp.Sentence'

为什么它告诉我我没有实现初始化程序?我该怎么做才能解决这个问题?

2 个答案:

答案 0 :(得分:2)

当您实现指定的初始值设定项时,子类不会继承超类指定的初始值设定项。见the docs

RLMObject的{​​{1}} calls self.init()

init(object:)

- (instancetype)initWithObject:(id)value { self = [self init]; 未继承Sentence初始值设定项。这就是你看错的原因。

我认为convenience initializer解决了您的问题:

init()

答案 1 :(得分:2)

在Swift中创建Realm模型时必须实现

init()。这是因为Realm使用Swift的reflect()进行内省来确定模型中的属性,这需要Realm创建模型的实例。

简单地创建一个空的init()应该可以正常工作。

还有一个问题是object没有提供适当的super.init(object:)参数。 RLMObject(object:)初始值设定项要求object参数是要设置的属性的数组或字典。在您的情况下,您传递的是String