【发布时间】:2015-10-28 16:51:30
【问题描述】:
Xcode 7.1 和 Swift 2.1 以及最新的 Realm Swift 0.96.2
我为 Realm 创建了一个模型类,但它不断抛出有关初始化的错误。我在一定程度上了解子类的初始化程序,但我无法理解这一点以及它失败的原因。这是我制作的课程:
import UIKit
import RealmSwift
class Boxes: Object {
dynamic var precessor: String = "B";
dynamic var id: Int = 0;
dynamic var boxNumber: String {
return "\(precessor) \(id)"; //computed property
}
dynamic var boxDescription: String? = "";
dynamic var brand: String? = "";
dynamic let dateCreated: NSDate
dynamic var dateUpdated: NSDate?
dynamic var photo: UIImage?
dynamic var tags: NSArray? = [];
override static func primaryKey() -> String? {
return "id"; //sets primary key of the model
}
init(precessor: String, id: Int, description: String, brand: String, dateCreated: NSDate, dateUpdated: NSDate) {
self.precessor = precessor;
self.boxDescription = description;
self.brand = brand;
self.dateUpdated = dateUpdated;
self.dateCreated = dateCreated;
super.init();
}
}
当我尝试时这不会建立,它告诉我:
'required' initializer 'init()' must be provided by subclass of 'Object'
我需要添加这一行:
required init() {
fatalError("init() has not been implemented")
}
这足以让编译器让我构建项目。但是,当我运行该项目时,它总是出错并在输出中给我 fatalError 行。我知道它是作为最后的初始化程序这样做的,但我不知道为什么。
这是否与我在某处缺少的超级初始化程序有关?我对 swift 比较陌生,但如果我不使用 Object 子类化我的类,我可以让我的初始化程序工作。
【问题讨论】:
-
我认为您需要查看有关领域的文档,了解您可以对
Object子类中的属性做什么和不能做什么。例如我不认为它会支持UIImage或NSArray... -
我会仔细检查,但我被告知 CoreData 不会持有
UIImage并建议改用 Realm。谢谢! -
您可能需要先将图像转换为
NSData,因为这是受支持的。虽然“NSData 属性不能容纳超过 16MB 的数据。” -
一旦我通过了初始化错误,我收到了那些确切问题(数组和图像)的运行时错误。现在我已经删除了数组并将图像更改为 NSData。感谢您的信息和帮助!