2016-07-21 9 views
2

Ich erhalte einen Fehler, wenn ich versuche, ein Array zu speichern, das aus einer JSON-Zeichenfolge stammt. Ich habe versucht, RLMArray ohne Erfolg zu verwenden.Wie behalte ich ein Array mit Realm Swift und ObjectMapper?

Der Fehler, den ich erhalten ist:

'RLMException', Grund: ‚Eigentum 'Seite' ist vom Typ 'RLMArray < (null)>', das keinen RLMArray Objekttyp unterstützt wird.

Meine Modellklasse:

public class Project: Object, Mappable { 

    dynamic var id = 0 
    dynamic var user: User! 
    dynamic var page: RLMArray! 
    dynamic var error_message: String! = "" 
    dynamic var status: String! = "" 

    override public static func primaryKey() -> String? { 
     return "id" 
    } 

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

    public func mapping(map: Map) { 
     user <- map["user"] 
     page <- map["page"] 
     error_message <- map["error_message"] 
     status <- map["status"] 

    } 
} 

JSON-Datei:

let parameters = [ 
       "user": [ 
        "username": "Marcus", 
        "password": "123asd" 
       ], 
       "page": [ 
        "home": [ 
           [ 
           "kind": "navigation", 
           "title": "suite", 
           "image": "ic_suite", 
           "backgroundImage": "ic_background1" 
           ], 
           [ 
            "kind": "navigation", 
            "title": "jardim", 
            "image": "ic_jardim", 
            "backgroundImage": "ic_background2" 
           ] 
          ], 
        "suite": [ 
           [ 
           "kind": "button", 
           "title": "My Master Suite", 
           "textColor": "0x000000", 
           "textSize": "16" 
           ] 
        ] 
       ], 
       "status": "success", 
       "error_message": "" 
     ] 
self.project = Mapper<Project>().map(parameters) 

Antwort

1

Ihre Klasse erbt von Object, Realm Swift der Basisklasse, sondern versucht RLMArray, ein Realm Objective-C zu verwenden, Typ, in seiner Schnittstelle. Du kannst Realm Swift und Realm Objective-C nicht auf diese Weise mischen. Sie sollten List<T> für Array-Eigenschaften verwenden, wenn Sie Realm Swift verwenden.

+0

Ich versuchte Liste zu verwenden, aber bekam: Eigenschaft nicht dynamisch markiert werden kann, weil seine Art nicht in Objective-C dargestellt werden kann – Marckaraujo

+0

'Liste ' Eigenschaften als 'lassen property = Liste ()' erklärt werden sollten. Weitere Informationen finden Sie in [Realms Deklaration der Eigentumsdeklaration] (https://realm.io/docs/swift/latest/#cheatsheet). – bdash

+0

Danke @bdash, aber ich kann nicht verwenden Liste (), wenn Sie gesehen haben, meine ArrayList haben verschiedene Arten von Objekten. – Marckaraujo