我有一个JSON数组,它是通过Alamofire从一个远程位置拉下来的,然后我试图读取并存储在Realm中。
我试图将代码减少到最低限度,但希望它仍然有意义。每个数组对象实际上包含大约10个不同的属性,但我只是在title中留下来简化它。
我看到的问题是
我认为问题是因为json是一个包含数组(媒体)的对象,它试图从对象而不是数组中解码,但我还无法找出如何做到这一点。当有人指出我漏掉了一行字时,我无疑会打自己一巴掌!
在我之前的一些工作中,我有一个被正确地推送到领域的对象数组,但是对于那个场景,我有一个包含RealmSwift.List的“根”对象,但是这导致了两个领域对象被创建,一个根对象有指向my object数组的指针,另一个是MyObject。我试图避免这种情况,在领域中只有一个“MediaMdl”对象。这可能吗?
{
"media": [
{
"title": "Clerk",
},
{
"title": Jay and Silent Bob Strike Back",
},
{
"title": "Mallrats",
}
]
}
视图控制器
import UIKit
class MediaGridVC: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
DataService.instance.downloadMedia(completion: { (mediaSuccess) in
print("Media Data Success = \(mediaSuccess)")
})
}
}
对象模型
import Foundation
import Realm
import RealmSwift
@objcMembers class MediaMdl: Object, Decodable {
dynamic var title: String? = nil
enum CodingKeys: String, CodingKey {
case title
}
required init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
title = try container.decode(String.self, forKey: .title)
super.init()
}
required init() {
super.init()
}
required init(value: Any, schema: RLMSchema) {
super.init(value: value, schema: schema)
}
required init(realm: RLMRealm, schema: RLMObjectSchema) {
super.init(realm: realm, schema: schema)
}
}
import Foundation
import Alamofire
import AlamofireObjectMapper
import ObjectMapper
import SwiftyJSON
import Realm
import RealmSwift
class DataService {
static let instance = DataService()
func downloadMedia(completion: @escaping CompletionHandler) {
Alamofire.request("URL_TO_JSON", method: .get, parameters: nil, encoding: JSONEncoding.default, headers: HEADER).responseJSON { (response) in
if response.result.value != nil {
guard let data = response.data else {
print("downloadMedia() - data error!")
completion(false)
return
}
do {
let mediaData = try JSONDecoder().decode(MediaMdl.self, from: data)
// TODO.. write to realm db
//let realm = try Realm()
//try realm.write {
// realm.add(mediaData)
//}
completion(true)
return
}
catch let error {
print("downloadMedia() - error: \(error)")
completion(false)
return
}
}
else {
print("downloadMedia() nil!")
completion(false)
}
}
}
}