2017-03-13 7 views
0

私は素早く新しいです。私はJSONからデータをダウンロードして保存するためにいくつかのライブラリを使いたいと思います。これを行うにはObjectMapperRealmAlamofireを使用しています。私はAlamofireObjectMapperでデータをダウンロードできますが、私がRealmを使い始めたときにすべてが間違っていました。問題は、モデルでArrayを使用したときにうまくいきましたが、Realmを使用し始めた後、ArrayではなくListを使用する必要がありました。ここでObjectMapperとRealmを使用してJSONからデータをダウンロード

は私のモデルである:

class ServiceItem: Object, Mappable { 
dynamic var item: [Item]? 
//var item = List<Item>() 

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

func mapping(map: Map) { 
    item <- map["Item"] 
} 
} 

class Item: Object, Mappable { 
    dynamic var id: String? 
    dynamic var parentId: String? 
    dynamic var userName: String? 
    dynamic var userAddress: String? 
    dynamic var userMegye: String? 
    dynamic var userUtca: String? 
    dynamic var userIrsz: String? 
    dynamic var userKontakt: String? 
    dynamic var userEmail: String? 
    dynamic var userPhone: String? 
    dynamic var userMobile: String? 
    dynamic var userWeb: String? 
    dynamic var userDesc: String? 
    dynamic var userImage: String? 
    dynamic var gpslat: String? 
    dynamic var gpslong: String? 

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

    // Mappable 
    func mapping(map: Map) { 
     id <- map["id"] 
     parentId   <- map["parent_id"] 
     userName  <- map["user_name"] 
     userAddress  <- map["user_address"] 
     userMegye <- map["user_megye"] 
     userUtca <- map["user_utca"] 
     userIrsz  <- map["user_irsz"] 
     userEmail <- map["user_email"] 
     userPhone  <- map["user_phone"] 
     userMobile <- map["user_mobile"] 
     userWeb  <- map["user_web"] 
     userDesc <- map["user_desc"] 
     userImage  <- map["user_image"] 
     gpslat <- map["gpslat"] 
     gpslong  <- map["gpslong"] 
     userKontakt <- (map["user_kontakt"]) 
    } 
} 

そしてここでは、データをダウンロードして保存するには、私のFUNCです:

func downLoadDataFromJSON() { 

    let URL = "...." 

    let item = Item() 

    Alamofire.request(URL).responseObject { (response: DataResponse<ServiceItem>) in 

     let serviceResponse = response.result.value 

     let realm = try! Realm() 

     if let allServices = serviceResponse?.item{ 
      for items in allServices { 

       print(items.id!) 
       print(items.userName!) 
      } 
     } 

    } 
} 

私は「アレイ」を使用する場合の違いはループがある「のために」、です実行中でJSONのデータを見ることができますが、 "List"を使用するとコードはループに入ることさえありません。

答えて

1

ObjectMapperがListタイプに変換できないという問題があります。そのためには、thisのようなカスタムトランスフォームが必要です。しかし、Realmが私のモデルを保存していないので、私はそれにいくつかの問題を抱えていました。

は、だから私は、次の方法で行くことにしました。ここでは

ObjectMapperは動作しますが、それはレルムによって救われるために除外するためにあなたが別の変数を宣言、中:

let backingItem = List<Item>() 
var item: [Item] { 
    get { 
     return backingItem.map { $0 } 
    } 
    set { 
     backingItem.removeAll() 
     backingItem.append(objectsIn: newValue) 
    } 
} 

、その後

override public static func ignoredProperties() -> [String] { 
    return ["item"] 
} 
+0

ありがとうございます。 'ignoredProperties()'メソッドをどこで使う必要があるのか​​教えてください。それはリストと一緒に戻ってくるはずですか? –

+0

とにかく私はこのメッセージを受け取りました: 'すべてのプロパティはプリミティブ、NSString、NSDate、NSData、NSNumber、RLMArray、RLMLinkingObjects、またはRLMObjectのサブクラスでなければなりません。 ' –

+0

ignoredProperties関数を書いていましたか?これはRealmにDBに格納されないプロパティを通知する関数です。 – kerry

関連する問題