Приложение вылетает при попытке сохранить данные в моей модели - PullRequest
0 голосов
/ 01 октября 2018

Я занимаюсь разработкой приложения с использованием Realm.В какой-то момент в моем приложении, когда я пытаюсь манипулировать своей моделью, мое приложение неожиданно зависло.Вот что сказала трассировка стека

Может только добавлять, удалять или создавать объекты в области в транзакции записи - сначала вызовите beginWriteTransaction для экземпляра RLMRealm

Что я пытаюсь сделать:

Давайте разберем мою проблему по частям. Ниже приведена моя модель приложения

@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

}

Теперь я пытаюсь получить списоквсе классы, как это из области (после сохранения их в области)

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)

            }



        }

** В приведенном выше коде вы можете видеть, что я собираюданные от имени идентификаторов и сохранение результирующих массивов в модели.Итак, я получаю сообщение об ошибке в следующей строке **

 teacherModel.Students = studentsList[0]

Теперь я действительно не понимаю, почему это происходит?Я не сохраняю данные в области, я сохраняю в своей модели, но все равно получаю ошибку.

1 Ответ

0 голосов
/ 01 октября 2018

В базе данных Realm, если вы хотите изменить какую-либо модель (сохранить новые данные или обновить), операция должна быть выполнена в транзакции записи:

try! realm.write {
    realm.add(<your_model_objects>)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...