在 Realm swift4 中存储带有列表的嵌套模型对象
Store nested model object with list in Realm swift4
我有以下回复 api
{
"status": true,
"allClasses": [
{
"ClassId": "4",
"class": "I",
"Divisions": [
{
"DivId": "1",
"division": "A",
"Subjects": [
{
"SubId": "28",
"subject": "Hindi",
"subSubject": "Hindi"
},
{
"SubId": "29",
"subject": "Hindi",
"subSubject": "Hindi I"
},
{
"SubId": "33",
"subject": "Hindi",
"subSubject": "Literature"
}
]
}
]
},
{
"ClassId": "5",
"class": "II",
"Divisions": [
{
"DivId": "2",
"division": "A",
"Subjects": [
{
"SubId": "33",
"subject": "Hindi",
"subSubject": "Literature"
}
]
},
{
"DivId": "4",
"division": "B",
"Subjects": []
}
]
},
{
"ClassId": "6",
"class": "III",
"Divisions": [
{
"DivId": "3",
"division": "A",
"Subjects": []
}
]
},
{
"ClassId": "1",
"class": "Nursery",
"Divisions": [
{
"DivId": "5",
"division": "A",
"Subjects": []
}
]
},
{
"ClassId": "2",
"class": "Jr KG",
"Divisions": [
{
"DivId": "6",
"division": "A",
"Subjects": []
}
]
},
{
"ClassId": "3",
"class": "Sr KG",
"Divisions": [
{
"DivId": "7",
"division": "A",
"Subjects": []
}
]
}
]
}
我想将这些数据存储到 Realm 中,所以我为 Object
创建了以下模型类
class classList : Object{
@objc dynamic var ClassId ,className : String?
var divArr = List<divList>()
convenience init(ClassId: String,className : String, divArr : List<divList>)
{
self.init()
self.ClassId = ClassId
self.className = className
self.divArr = divArr
}
}
class divList : Object {
@objc dynamic var DivId ,division : String?
var subArr = List<subjectList>()
convenience init(DivId: String,division : String, subArr : List<subjectList>)
{
self.init()
self.DivId = DivId
self.division = division
self.subArr = subArr
}
}
class subjectList : Object{
@objc dynamic var SubId ,subject,subSubject : String?
convenience init(SubId: String,subject : String,subSubject : String){
self.init()
self.SubId = SubId
self.subject = subject
self.subSubject = subSubject
}
}
在下面的代码中,我解析了这个响应并尝试将最终对象存储到 Realm
var classListArr = List<classList>()
var divListArr = List<divList>()
var subListArr = List<subjectList>()
if status
{
//first remove data from realm
let removeClass = RealmService.shared.realm.objects(classList.self)
let realm = try! Realm()
try! realm.write {
realm.delete(removeClass)
}
let allClasses = json!["allClasses"].arrayValue
// self.classListArr.removeAll()
for classess in allClasses
{
let Divisions = classess["Divisions"].arrayValue
// self.divListArr.removeAll()
for div in Divisions
{
let Subjects = div["Subjects"].arrayValue
// self.subListArr.removeAll()
for sub in Subjects
{
let subjectListObj = subjectList()
subjectListObj.SubId = sub["SubId"].stringValue
subjectListObj.subject = sub["subject"].stringValue
subjectListObj.subSubject = sub["subSubject"].stringValue
self.subListArr.append(subjectListObj)
}
self.classDIvArr.append(classDiv(DivId: div["DivId"].stringValue, division: div["division"].stringValue, ClassId: classess["ClassId"].stringValue, className: classess["class"].stringValue))
let divListObj = divList()
divListObj.DivId = div["DivId"].stringValue
divListObj.division = div["division"].stringValue
divListObj.subArr = self.subListArr
self.divListArr.append(divListObj)
}
//store fresh data into realm
let classObj = classList()
classObj.ClassId = classess["ClassId"].stringValue
classObj.className = classess["class"].stringValue
classObj.divArr = self.divListArr
RealmService.shared.create(classObj)
}
self.stopActivityIndicator()
// self.setDataInDB()
self.classTableView.reloadData()
}
但是当我尝试执行我的代码时,应用程序崩溃了,我收到了以下错误
*** Terminating app due to uncaught exception 'RLMException', reason: 'Cannot modify managed RLMArray outside of a write transaction.'
您正试图在写入事务之外修改 Realm 对象数组。
Realm 有一些限制,所以你应该使用:
try! realm.write {
RealmService.shared.create(classObj)
}
我有以下回复 api
{
"status": true,
"allClasses": [
{
"ClassId": "4",
"class": "I",
"Divisions": [
{
"DivId": "1",
"division": "A",
"Subjects": [
{
"SubId": "28",
"subject": "Hindi",
"subSubject": "Hindi"
},
{
"SubId": "29",
"subject": "Hindi",
"subSubject": "Hindi I"
},
{
"SubId": "33",
"subject": "Hindi",
"subSubject": "Literature"
}
]
}
]
},
{
"ClassId": "5",
"class": "II",
"Divisions": [
{
"DivId": "2",
"division": "A",
"Subjects": [
{
"SubId": "33",
"subject": "Hindi",
"subSubject": "Literature"
}
]
},
{
"DivId": "4",
"division": "B",
"Subjects": []
}
]
},
{
"ClassId": "6",
"class": "III",
"Divisions": [
{
"DivId": "3",
"division": "A",
"Subjects": []
}
]
},
{
"ClassId": "1",
"class": "Nursery",
"Divisions": [
{
"DivId": "5",
"division": "A",
"Subjects": []
}
]
},
{
"ClassId": "2",
"class": "Jr KG",
"Divisions": [
{
"DivId": "6",
"division": "A",
"Subjects": []
}
]
},
{
"ClassId": "3",
"class": "Sr KG",
"Divisions": [
{
"DivId": "7",
"division": "A",
"Subjects": []
}
]
}
]
}
我想将这些数据存储到 Realm 中,所以我为 Object
class classList : Object{
@objc dynamic var ClassId ,className : String?
var divArr = List<divList>()
convenience init(ClassId: String,className : String, divArr : List<divList>)
{
self.init()
self.ClassId = ClassId
self.className = className
self.divArr = divArr
}
}
class divList : Object {
@objc dynamic var DivId ,division : String?
var subArr = List<subjectList>()
convenience init(DivId: String,division : String, subArr : List<subjectList>)
{
self.init()
self.DivId = DivId
self.division = division
self.subArr = subArr
}
}
class subjectList : Object{
@objc dynamic var SubId ,subject,subSubject : String?
convenience init(SubId: String,subject : String,subSubject : String){
self.init()
self.SubId = SubId
self.subject = subject
self.subSubject = subSubject
}
}
在下面的代码中,我解析了这个响应并尝试将最终对象存储到 Realm
var classListArr = List<classList>()
var divListArr = List<divList>()
var subListArr = List<subjectList>()
if status
{
//first remove data from realm
let removeClass = RealmService.shared.realm.objects(classList.self)
let realm = try! Realm()
try! realm.write {
realm.delete(removeClass)
}
let allClasses = json!["allClasses"].arrayValue
// self.classListArr.removeAll()
for classess in allClasses
{
let Divisions = classess["Divisions"].arrayValue
// self.divListArr.removeAll()
for div in Divisions
{
let Subjects = div["Subjects"].arrayValue
// self.subListArr.removeAll()
for sub in Subjects
{
let subjectListObj = subjectList()
subjectListObj.SubId = sub["SubId"].stringValue
subjectListObj.subject = sub["subject"].stringValue
subjectListObj.subSubject = sub["subSubject"].stringValue
self.subListArr.append(subjectListObj)
}
self.classDIvArr.append(classDiv(DivId: div["DivId"].stringValue, division: div["division"].stringValue, ClassId: classess["ClassId"].stringValue, className: classess["class"].stringValue))
let divListObj = divList()
divListObj.DivId = div["DivId"].stringValue
divListObj.division = div["division"].stringValue
divListObj.subArr = self.subListArr
self.divListArr.append(divListObj)
}
//store fresh data into realm
let classObj = classList()
classObj.ClassId = classess["ClassId"].stringValue
classObj.className = classess["class"].stringValue
classObj.divArr = self.divListArr
RealmService.shared.create(classObj)
}
self.stopActivityIndicator()
// self.setDataInDB()
self.classTableView.reloadData()
}
但是当我尝试执行我的代码时,应用程序崩溃了,我收到了以下错误
*** Terminating app due to uncaught exception 'RLMException', reason: 'Cannot modify managed RLMArray outside of a write transaction.'
您正试图在写入事务之外修改 Realm 对象数组。
Realm 有一些限制,所以你应该使用:
try! realm.write {
RealmService.shared.create(classObj)
}