2017-05-15 1 views
0

je besoin d'aide pour la cartographie de mon objetRoyaume + Mapper Object + SwityJSON

Royaume Modèle: https://gist.github.com/n1tesh/7d6c6e155285dd6b39c8edba76f6eba5

Voilà comment je fais

// write request result to realm database 
    let entries = json["data"] 
    realm.beginWrite() 
     let entry: ChatGroups = Mapper<ChatGroups>().map(JSONObject: entries)! 
     realm.add(entry, update: true) 

    do { 
     try realm.commitWrite() 
    } catch { 

    } 

Réponse JSON: https://gist.github.com/n1tesh/bf84cbd930f8c76b340f21723a217ebe

Mais je reçois erreur fatal error: unexpectedly found nil while unwrapping an Optional value

S'il vous plaît aidez-moi avec ce que je fais mal.

+0

Comment obtenez-vous le JSON variable et quel est son type? –

+0

@ DávidPásztor Son de type JSON. J'utilise SwiftyJSON. if let value = response.result.value { let json = JSON (valeur) callback (true, json, nil) } – Nitesh

+0

@Nitesh j'ai vu quelque chose de différent dans votre mapping, updated_by et member sont des tableaux, donc vous devez use var members = Liste () par exemple. Essayez d'utiliser RealmOptional () au lieu de Bool. Pour la liste, vous devez faire une transformation pour travailler voir ceci: https://gist.github.com/Jerrot/fe233a94c5427a4ec29b –

Répondre

3

Créer une classe pour transformer tableau à la liste, parce que le royaume n'accepte pas les tableaux.

import ObjectMapper 
import RealmSwift 

public class ListTransform<T:RealmSwift.Object> : TransformType where T:Mappable { 
    public typealias Object = List<T> 
    public typealias JSON = [AnyObject] 

    let mapper = Mapper<T>() 

    public init(){} 

    public func transformFromJSON(_ value: Any?) -> Object? { 
     let results = List<T>() 
     if let value = value as? [AnyObject] { 
      for json in value { 
       if let obj = mapper.map(JSONObject: json) { 
        results.append(obj) 
       } 
      } 
     } 
     return results 
    } 

    public func transformToJSON(_ value: Object?) -> JSON? { 
     var results = [AnyObject]() 
     if let value = value { 
      for obj in value { 
       let json = mapper.toJSON(obj) 
       results.append(json as AnyObject) 
      } 
     } 
     return results 
    } 
} 

Ensuite, dans votre classe ChatGroups vous devez appeler la fonction Transform pour faire la transformation, faire ce changement:

updated_by    <- map["updated_by"] 
members     <- map["member"] 

à ceci:

updated_by    <- (map["updated_by"], ListTransform<QuorgUser>()) 
members     <- (map["member"], ListTransform<GroupMember>()) 
+0

Merci, cela a résolu mon problème. Appréciez vos efforts pour creuser dur pour résoudre ce problème. – Nitesh

+0

@Nitesh aucun problème mate! :) –

0

Dans votre ChatGroup classe que vous avez déclaré

dynamic var image: String = "" 

mais dans votre réponse votre OBTIENNENT null dans la clé de l'image de la réponse JSON.

Vous devez convertir votre déclaration:

dynamic var image: String? = nil