これらのバージョンでは、RealmでObjectMapperを使用しています。
しかし、Realm + ObjectMapperで新しいクラスを追加すると、エラーが発生しました。
以下の行はエラーメッセージです。
Must call a designated initializer of the superclass 'Navigator'
そしてthisiは私が追加した新しいクラスです。
import RealmSwift
import ObjectMapper
class Navigator: Object, Mappable {
dynamic var id : Int = 0
dynamic var name : String = ""
dynamic var imageURL : String = ""
dynamic var coverImageURL : String = ""
dynamic var totalPlayCount : Int = 0
dynamic var totalFavCount : Int = 0
dynamic var createdAt : NSDate = NSDate()
dynamic var updatedAt : NSDate = NSDate()
var guides : [Guide] {
return linkingObjects(Guide.self, forProperty: "navigator")
}
override class func primaryKey() -> String {
return "id"
}
override static func indexedProperties() -> [String] {
return ["name", "imageURL", "totalPlayCount", "totalFavCount"]
}
// Mark: - ObjectMapper
required convenience init?(_ map: Map) {
self.init()
}
func mapping(map: Map) {
id <- map["id"]
name <- map["name"]
imageURL <- map["avatar_url"]
coverImageURL <- map["cover_url"]
totalPlayCount <- map["listen_count"]
totalFavCount <- map["favorite_count"]
createdAt <- (map["created_at"], ISO8601DateTransform())
updatedAt <- (map["updated_at"], ISO8601DateTransform())
}
}
このクラスは正しく機能します。
import RealmSwift
import ObjectMapper
class Guide: Object, Mappable {
dynamic var id : Int = 0
dynamic var title : String = ""
dynamic var spotName : String = ""
dynamic var placeId : String = ""
dynamic var explanation : String = ""
dynamic var category : String = ""
dynamic var totalPlayCount : Int = 0
dynamic var totalFavCount : Int = 0
dynamic var latitude : Double = 0.0
dynamic var longitude : Double = 0.0
dynamic var createdAt : NSDate = NSDate()
dynamic var updatedAt : NSDate = NSDate()
dynamic var navigator: Navigator?
var relatedGuides = List<Guide>()
override class func primaryKey() -> String {
return "id"
}
// インデックス設定
override static func indexedProperties() -> [String] {
return ["name", "category", "firstImageUrl", "totalPlayCount"]
}
// override static func ignoredProperties() -> [String] {
// return []
// }
// Mark: - ObjectMapper
required convenience init?(_ map: Map) {
self.init()
}
func mapping(map: Map) {
id <- map["id"]
title <- map["name"]
spotName <- map["spot.name"]
explanation <- map["description"]
category <- map["category.name"]
totalPlayCount <- map["listen_count"]
totalFavCount <- map["favorite_count"]
latitude <- map["geometry.latitude"]
longitude <- map["geometry.longitude"]
createdAt <- (map["created_at"], ISO8601DateTransform())
updatedAt <- (map["updated_at"], ISO8601DateTransform())
}
}
だから私は次に何をすべきか混乱しています。
誰かアドバイスをください。
こんにちは。このコードをテストしたところ、エラーは発生していません。あなたはまだこの問題を抱えていますか?
私はまったく同じ問題を抱えています:
import ObjectMapper
import RealmSwift
class WRUser: Object, Mappable {
dynamic var ID: Int = 0
dynamic var email: String = ""
// MARK: - Init
required convenience init?(_ map: Map) {
self.init()
}
func mapping(map: Map) {
ID <- map["user.id"]
email <- map["user.email"]
}
}
実際にプロジェクトをビルドするとエラーが発生します。スーパークラス「WRUser」の指定された初期化子を呼び出す必要があります
何かご意見は?
アップデート:
この問題は、WRUserのサブクラス(WRUserClientなど)を作成した場合にのみ発生します。 WRUserがサブクラスを持たないクラスである限り、プロジェクトはコンパイルされます。
@nashiroxサブクラスしましたか?
なぜこれが起こるのか考えてみてください。
別のマップ可能なオブジェクトのサブクラスで同じ問題が発生しています。 この問題はクローズと表示されていますが、解決策がないようです。
こんにちは、
マップ可能なオブジェクトをサブクラス化するときにも同じエラーが発生します。
私にとって実用的な解決策は、initメソッド(親クラスと同じ)を追加することです。
したがって、上記の場合:
class WRUserSubclass: WRUser {
required convenience init?(_ map: Map) {
self.init()
}
func mapping(map: Map) {
// extended mapping here
}
}
この助けを願っています
最も参考になるコメント
こんにちは、
マップ可能なオブジェクトをサブクラス化するときにも同じエラーが発生します。
私にとって実用的な解決策は、initメソッド(親クラスと同じ)を追加することです。
したがって、上記の場合:
この助けを願っています