在 swift 的 Realm 中保存 Json 数据
Saving Json data in Realm in swift
我想在 swift 的 Realm 中保存 json 数据。但我收到如下错误:
Terminating app due to uncaught exception 'RLMException',
reason: 'Realm accessed from incorrect thread'"
在这种情况下使用什么 - "GCD" 或 "operation"
我在这里添加我的代码
func getDataFromServer(){
let personData = Person()
let headers = [
"user_id": "1",
"access_token": "5ae39568b47d3edf12345dc7ccddf519",
]
let request = NSMutableURLRequest(url: NSURL(string: "http://prvy.in/sme/assgnment_ios/api/user/data")! as URL)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
} else {
if let data = data {
do{
guard let json = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as? NSDictionary else{
return
}
if let resultArray = json["data"] as? NSArray{
for allData in resultArray {
if let resultData = allData as? NSDictionary{
let regdId = resultData[REGD_ID] as? String
if let firstName = resultData[FIRST_NAME] as? String{
print(firstName)
personData.firstName = firstName
}
self.saveReamData(personData)
}
}
}catch{
print("error loading data")
}
}
}
})
dataTask.resume()
}
我的保存函数是:
func saveReamData(_ person: Person) {
let backgroundQueue = DispatchQueue(label: ".realm", qos: .background)
backgroundQueue.async {
do {
try self.realm?.write {
self.realm?.add(person)
}
} catch {
print("error saving to realm")
}
}
}
如果您在主队列中创建了 Realm 实例,则只能在主队列中使用它。在您的代码中,您试图将数据写入后台队列中的 Realm,但您已经在主队列中创建了 Realm 实例。
如果您想在后台队列中将数据写入 Realm,请使用 Realm 文档中的代码:
DispatchQueue(label: "background").async {
autoreleasepool {
let realm = try! Realm()
guard let person = realm.resolve(personRef) else {
return // person was deleted
}
try! realm.write {
person.name = "Jane Doe"
}
}
}
我想在 swift 的 Realm 中保存 json 数据。但我收到如下错误:
Terminating app due to uncaught exception 'RLMException',
reason: 'Realm accessed from incorrect thread'"
在这种情况下使用什么 - "GCD" 或 "operation"
我在这里添加我的代码
func getDataFromServer(){
let personData = Person()
let headers = [
"user_id": "1",
"access_token": "5ae39568b47d3edf12345dc7ccddf519",
]
let request = NSMutableURLRequest(url: NSURL(string: "http://prvy.in/sme/assgnment_ios/api/user/data")! as URL)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
} else {
if let data = data {
do{
guard let json = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as? NSDictionary else{
return
}
if let resultArray = json["data"] as? NSArray{
for allData in resultArray {
if let resultData = allData as? NSDictionary{
let regdId = resultData[REGD_ID] as? String
if let firstName = resultData[FIRST_NAME] as? String{
print(firstName)
personData.firstName = firstName
}
self.saveReamData(personData)
}
}
}catch{
print("error loading data")
}
}
}
})
dataTask.resume()
}
我的保存函数是:
func saveReamData(_ person: Person) {
let backgroundQueue = DispatchQueue(label: ".realm", qos: .background)
backgroundQueue.async {
do {
try self.realm?.write {
self.realm?.add(person)
}
} catch {
print("error saving to realm")
}
}
}
如果您在主队列中创建了 Realm 实例,则只能在主队列中使用它。在您的代码中,您试图将数据写入后台队列中的 Realm,但您已经在主队列中创建了 Realm 实例。
如果您想在后台队列中将数据写入 Realm,请使用 Realm 文档中的代码:
DispatchQueue(label: "background").async {
autoreleasepool {
let realm = try! Realm()
guard let person = realm.resolve(personRef) else {
return // person was deleted
}
try! realm.write {
person.name = "Jane Doe"
}
}
}