Objectmapper: 「スーパークラス「ナビゲーター」の指定された初期化子を呼び出す必要があります」エラーが発生しました。

作成日 2016年01月28日  ·  4コメント  ·  ソース: tristanhimmelman/ObjectMapper

これらのバージョンでは、RealmでObjectMapperを使用しています。

  • ObjectMapper 1.1.1
  • レルム0.97.0
  • スイフト2.1.1
  • Xcode 7.2

しかし、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())
    }
}

だから私は次に何をすべきか混乱しています。
誰かアドバイスをください。

最も参考になるコメント

こんにちは、
マップ可能なオブジェクトをサブクラス化するときにも同じエラーが発生します。
私にとって実用的な解決策は、initメソッド(親クラスと同じ)を追加することです。

したがって、上記の場合:

class WRUserSubclass: WRUser {

    required convenience init?(_ map: Map) {
        self.init()
    }

    func mapping(map: Map) {
        // extended mapping here
    }
}

この助けを願っています

全てのコメント4件

こんにちは。このコードをテストしたところ、エラーは発生していません。あなたはまだこの問題を抱えていますか?

私はまったく同じ問題を抱えています:

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
    }
}

この助けを願っています

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

liltimtim picture liltimtim  ·  3コメント

pcompassion picture pcompassion  ·  3コメント

borut-t picture borut-t  ·  4コメント

loryhuz picture loryhuz  ·  4コメント

maksTheAwesome picture maksTheAwesome  ·  4コメント