当我尝试在模型中保存数据时,应用崩溃了

时间:2018-10-01 05:58:22

标签: ios swift realm

我正在使用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]

现在我真的不明白为什么会这样吗?我不是在领域中保存数据,而是在模型中保存,但仍然出现错误。

1 个答案:

答案 0 :(得分:2)

在Realm数据库中,如果要修改任何模型(保存新数据或更新),则应在写事务中执行该操作:

try! realm.write {
    realm.add(<your_model_objects>)
}