这是我的班级:
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'
为什么它告诉我我没有实现初始化程序?我该怎么做才能解决这个问题?
答案 0 :(得分:2)
当您实现指定的初始值设定项时,子类不会继承超类指定的初始值设定项。见the docs。
RLMObject
的{{1}} calls self.init()
:
init(object:)
但- (instancetype)initWithObject:(id)value {
self = [self init];
未继承Sentence
初始值设定项。这就是你看错的原因。
我认为convenience
initializer解决了您的问题:
init()
答案 1 :(得分:2)
init()
。这是因为Realm使用Swift的reflect()
进行内省来确定模型中的属性,这需要Realm创建模型的实例。
简单地创建一个空的init()
应该可以正常工作。
还有一个问题是object
没有提供适当的super.init(object:)
参数。 RLMObject(object:)
初始值设定项要求object
参数是要设置的属性的数组或字典。在您的情况下,您传递的是String
。