[英]Realm DB in Swift And Object Mapper (Json)
Halo Guys,我是Swift編程的新手,我遇到了問題,我使用了Realm DB來存儲用戶通過身份驗證后存儲的數據。 來自服務器應用程序的結果已被映射為json字符串,其工作,並且在將json轉換為對象/模型后,我將其放入領域數據庫中,
下面是代碼:
print(response.text)
let requestResult:RequestResult = Mapper<RequestResult>().map(response.text)!
var publicLogin : PublicLogin = Mapper<PublicLogin>().map(requestResult.result)!
let t : String = Mapper<PublicLogin>().toJSONString(publicLogin)!
print("TTT===== "+t)
dispatch_sync(dispatch_queue_create("background", nil)){
let realm = try! Realm()
try! realm.write{
realm.add(publicLogin)
publicLogin = realm.objects(PublicLogin.self)[0]
let x : String = Mapper<PublicLogin>().toJSONString(publicLogin)!
print(" ########## \n : "+x)
let sideMenu = SSASideMenu(contentViewController: UINavigationController(rootViewController: HomeViewController()), leftMenuViewController: LeftMenuViewController(), rightMenuViewController: RightMenuViewController())
let color:UIColor = UIColor(netHex:0x000000)
sideMenu.view.backgroundColor = color
sideMenu.configure(SSASideMenu.MenuViewEffect(fade: true, scale: true, scaleBackground: false))
sideMenu.configure(SSASideMenu.ContentViewEffect(alpha: 1.0, scale: 0.7))
sideMenu.configure(SSASideMenu.ContentViewShadow(enabled: true, color: UIColor.blackColor(), opacity: 0.6, radius: 6.0))
self.presentViewController(sideMenu, animated: true, completion: nil)
self.loginButton.selected = false ;
progress.Close()
}
}
我確定json數據首次有效,我將控制台/日志放在下面以詳細說明我的情況:
但是在我進入領域數據庫並嘗試返回之后,似乎是null / nil對象,下面是console / log
{}字符串應該是一個json對象...這就是問題所在
有人可以幫助我解釋使用領域數據庫的正確方法嗎?或者您發現我的代碼中的錯誤嗎? 謝謝。
您正在嘗試保存對象,然后在同一寫入事務中對其進行訪問。 您應將其保存在寫事務中,然后在事務塊完成后對其進行訪問。 除此之外,您還需要在后台線程和寫事務內部更改UI元素,這是錯誤的。 就像我難過一樣,只在主線程上處理UI。
這是一個例子:
let requestResult:RequestResult = Mapper<RequestResult>().map(response.text)!
var publicLogin : PublicLogin = Mapper<PublicLogin>().map(requestResult.result)!
let t : String = Mapper<PublicLogin>().toJSONString(publicLogin)!
print("TTT===== "+t)
dispatch_sync(dispatch_queue_create("background", nil)){
let realm = try! Realm()
try! realm.write{
realm.add(publicLogin)
}
dispatch_async(dispatch_get_main_queue(), {
publicLogin = realm.objects(PublicLogin.self)[0]
let x : String = Mapper<PublicLogin>().toJSONString(publicLogin)!
print(" ########## \n : "+x)
let sideMenu = SSASideMenu(contentViewController: UINavigationController(rootViewController: HomeViewController()), leftMenuViewController: LeftMenuViewController(), rightMenuViewController: RightMenuViewController())
let color:UIColor = UIColor(netHex:0x000000)
sideMenu.view.backgroundColor = color
sideMenu.configure(SSASideMenu.MenuViewEffect(fade: true, scale: true, scaleBackground: false))
sideMenu.configure(SSASideMenu.ContentViewEffect(alpha: 1.0, scale: 0.7))
sideMenu.configure(SSASideMenu.ContentViewShadow(enabled: true, color: UIColor.blackColor(), opacity: 0.6, radius: 6.0))
self.presentViewController(sideMenu, animated: true, completion: nil)
self.loginButton.selected = false ;
progress.Close()
})
}
我建議您不要在此更新中使用后退線程,寫入事務對於在此處執行的線程之間的contexet切換來說不是一個很沉重的負擔。同樣,這取決於具體情況。像這樣簡單:
let requestResult:RequestResult = Mapper<RequestResult>().map(response.text)!
var publicLogin : PublicLogin = Mapper<PublicLogin>().map(requestResult.result)!
let t : String = Mapper<PublicLogin>().toJSONString(publicLogin)!
print("TTT===== "+t)
let realm = try! Realm()
try! realm.write{
realm.add(publicLogin)
}
publicLogin = realm.objects(PublicLogin.self)[0]
let x : String = Mapper<PublicLogin>().toJSONString(publicLogin)!
print(" ########## \n : "+x)
let sideMenu = SSASideMenu(contentViewController: UINavigationController(rootViewController: HomeViewController()), leftMenuViewController: LeftMenuViewController(), rightMenuViewController: RightMenuViewController())
let color:UIColor = UIColor(netHex:0x000000)
sideMenu.view.backgroundColor = color
sideMenu.configure(SSASideMenu.MenuViewEffect(fade: true, scale: true, scaleBackground: false))
sideMenu.configure(SSASideMenu.ContentViewEffect(alpha: 1.0, scale: 0.7))
sideMenu.configure(SSASideMenu.ContentViewShadow(enabled: true, color: UIColor.blackColor(), opacity: 0.6, radius: 6.0))
self.presentViewController(sideMenu, animated: true, completion: nil)
self.loginButton.selected = false ;
progress.Close()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.