私はRealmを初めて使っています。WebServiceからJSONデータをRealm DBに保存しようとするといくつか問題が発生します。JSONからRealmへのデータの保存
これはJSONです:
{
"Programacao":[
{
"Dia":"5",
"Idp":"1833",
"Programa":"T\u00e1 Na Hora",
"Inicio":"06:00",
"Final":"08:00",
"Data":"08\/04\/2016"
},
{
"Dia":"5",
"Idp":"1834",
"Programa":"Bom dia Chiru",
"Inicio":"08:00",
"Final":"09:00",
"Data":"08\/04\/2016"
},
{
"Dia":"5",
"Idp":"1835",
"Programa":"Conex\u00e3o",
"Inicio":"09:00",
"Final":"11:00",
"Data":"08\/04\/2016"
},
{
"Dia":"5",
"Idp":"1836",
"Programa":"As Mais Pedidas",
"Inicio":"11:00",
"Final":"12:00",
"Data":"08\/04\/2016"
},
{
"Dia":"5",
"Idp":"1837",
"Programa":"Casa da Sogra",
"Inicio":"12:00",
"Final":"13:00",
"Data":"08\/04\/2016"
},
{
"Dia":"5",
"Idp":"1838",
"Programa":"Canal Livre",
"Inicio":"13:00",
"Final":"15:00",
"Data":"08\/04\/2016"
},
{
"Dia":"5",
"Idp":"18",
"Programa":"Batid\u00e3o da Chiru",
"Inicio":"15:00",
"Final":"17:00",
"Data":"08\/04\/2016"
},
{
"Dia":"5",
"Idp":"1827",
"Programa":"Sul Bandas",
"Inicio":"17:00",
"Final":"19:00",
"Data":"08\/04\/2016"
},
{
"Dia":"5",
"Idp":"1828",
"Programa":"Voz do Brasil",
"Inicio":"19:00",
"Final":"20:00",
"Data":"08\/04\/2016"
},
{
"Dia":"5",
"Idp":"1831",
"Programa":"Al\u00f4 Chiru",
"Inicio":"20:00",
"Final":"23:59",
"Data":"08\/04\/2016"
}
]
}
私は次の構造を作成しました:
レルムオブジェクトクラス:
import Foundation
import RealmSwift
class ROListing: Object { // Programação da Rádio
dynamic var id = 0
dynamic var showName = ""
dynamic var showId = ""
dynamic var showStartTime = ""
dynamic var showEndTime = ""
dynamic var showNumericDate = ""
dynamic var showDate = ""
override static func primaryKey() -> String? {
return "id"
}
}
オブジェクトの操作クラス:
import Alamofire
import SwiftyJSON
import Foundation
class Listing: ResponseJSONObjectSerializable {
var showName :String? // nomePrograma
var showId :String? // idp
var showStartTime :String? // inicioPrograma
var showEndTime :String? // finalPrograma
var showNumericDate :String? // dia
var showDate :String? // data
required init?(json: JSON) {
self.showName = json["Programa"].string
self.showId = json["Idp"].string
self.showStartTime = json["Inicio"].string
self.showEndTime = json["Final"].string
self.showNumericDate = json["Dia"].string
self.showDate = json["Data"].string
}
required init() { }
}
class ListingArray: ResponseJSONObjectSerializable {
var showArray: [Listing]? // Programacao
required init?(json: JSON) {
if let arrayJson = json["Programacao"].array {
self.showArray = []
for json in arrayJson {
let instance = Listing(json: json)
self.showArray?.append(instance!)
}
}
}
required init() { }
}
を接続w WebServiceのi番目の通過:
func getRadioListing(success:() ->()) {
guard let url = apiController.createURLWithComponentsForListingsWith(appId: "63") else {
print("Invlaid URL!")
return
}
print(url)
Alamofire.request(.GET, url).responseObject {
(response: Response<ListingArray, NSError>) in
if let jsonResults = response.result.value {
self.listings = jsonResults
for listing in self.listings.showArray! {
RealmObjectManager.sharedInstance.createUpdateDB(withListing: listing)
}
success()
} else {
print("Error parsing JSON!")
return
}
}
}
そして最後に、実際にレルムDBにオブジェクトを保存するための方法。
func createUpdateDB(withListing listing: Listing) {
print(Realm.Configuration.defaultConfiguration.path!)
if self.listingArray.count == 0 {
do {
try self.realm.write {
let newListing = ROListing()
newListing.showName = listing.showName!
newListing.showId = listing.showId!
newListing.showStartTime = listing.showStartTime!
newListing.showEndTime = listing.showEndTime!
newListing.showNumericDate = listing.showNumericDate!
newListing.showDate = listing.showDate!
self.realm.add(newListing)
}
} catch let error as NSError {
print("Error creating Listing DB: \(error.userInfo)")
}
}
}
しかし、私はすべてのショーをDBに取り込むことができません。誰でもここで私を助けることができましたか?
ありがとうございます!
コールはすでにここに問題を釘付けしているかもしれませんが、念のために、あなたがしてくださいすることができますすべての番組を試してみると、何のエラーログが出るのですか?ありがとう! – TiM
ええ、それは私の論理に問題です!私はエラーは発生しませんが、最初の要素[0]だけが保存されています。私は私のlistingArrayが空(またはnil?)かどうかをチェックしてから、書き込みを実行する必要があると思います。ありがとうコールキャンプベル。 – acmobile