我正在使用 Realm 开发应用程序。在我的应用程序中的某个时刻,当我尝试操纵我的模型时,我的应用程序以意外的方式崩溃了。这是堆栈跟踪所说的内容
Can only add, remove, or create objects in a Realm in a write transaction - call beginWriteTransaction on an RLMRealm instance first
我正在尝试做的事情:
让我们分解我的部分问题。以下是我的应用程序模型
@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)
}
}
**在上面的代码中,您可以看到我正在代表 ID 收集数据并将结果数组保存在模型中。所以我在以下行中收到错误 **
teacherModel.Students = studentsList[0]
现在我真的不明白为什么会这样?我没有在 Realm 中保存数据,而是在我的模型中保存数据,但仍然出现错误。
最佳答案
在Realm数据库中,如果要修改任何模型(保存新数据或更新),操作应该在写事务中执行:
try! realm.write {
realm.add(<your_model_objects>)
}
关于ios - 当我尝试在我的模型中保存数据时应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52585300/