我正在使用Realm开发应用程序。在我的应用程序中,当我尝试操纵模型时,我的应用程序以意外的方式崩溃。这就是堆栈跟踪所说的
只能通过写事务在Realm中添加,删除或创建对象-首先在RLMRealm实例上调用beginWriteTransaction
我要做什么:
让我分解出部分问题。以下是我的应用模型
@objcMembers public class ClassGroup : Object , Codable {
dynamic var Id : Int? = ""
dynamic var ClassName : String? = ""
dynamic var TeacherId : Int = 0
dynamic var Teachers : [TeacherMdoel]? = []
}
@objcMembers public class TeacherModel : Object , Codable {
dynamic var Id : String? = ""
dynamic var Name : String? = ""
dynamic var ClassId : Int = 0
dynamic var Students : [StudentClass]? = []
}
@objcMembers public class StudentModel : Object , Codable {
dynamic var Id : String? = ""
dynamic var Name : String? = ""
dynamic var ClassId : Int = 0
dynamic var TeacherId : Int = 0
}
现在,我正在尝试从realm获取所有此类的列表(将它们保存到realm之后)
let mClassLists = mDbHelper.realmObj.objects(ClassGroup.self)
现在在这里我得到异常/错误。我正在做的是,我试图用一些包含上述所有模型的数据填充UITableView。我正在获取数据并将其保存在模型中,并试图将该列表提供给UITableView,但是我的应用程序因上面提到的错误而崩溃
let mClassLists = mDbHelper.realmObj.objects(ClassGroup.self)
let classLists = Array (mClassLists)
for classModel in classLists {
let resultPredicateTeachers = NSPredicate(format: "ClassId == %@", classModel.Id)
let mTeachersList = mDbHelper.realmObj.objects(TeacherModel.self).filter(resultPredicateTeachers)
if(mTeachersList.count > 0){
var listTeachers : [TeacherModel] = []
for teacherModel in mTeachersList {
let resultPredicateStudent = NSPredicate(format: "TeacherId == 29")
let mStudentList = mDbHelper.realmObj.objects(StudentModel.self).filter(resultPredicateStudent)
if(mStudentList.count > 0){
let studentsList = Array(mStudentList)
teacherModel.Students = studentsList[0]
}
listTeachers.append(savedDetailItem)
}
classModel.Teachers? = (listTeachers)
listClassModel.append(classModel)
}
}
**在上面的代码中,您可以看到我代表Ids收集数据并将结果数组保存在模型中。所以我在以下行中出现错误 **
teacherModel.Students = studentsList[0]
现在我真的不明白为什么会这样吗?我不是在领域中保存数据,而是在模型中保存,但仍然出现错误。
答案 0 :(得分:2)
在Realm数据库中,如果要修改任何模型(保存新数据或更新),则应在写事务中执行该操作:
try! realm.write {
realm.add(<your_model_objects>)
}