Обновление базы данных


#1

Подскажите кто знает.
в приложении использую Realm, например у нас есть некий список уроков.
для каждого урока есть переменная isCompleted. т.е. прошел урок -> isCompleted = true
для каждого юзера будут свои isCompleted.
Вопрос: как сохранить значения isCompleted для каждого юзера, если будет выпущено обновление приложения с добавлением уроков (структура не меняется).


#2

Это все хранится на сервере.
Или у вас нету сервера и все только локально?


#3

локально.
если не сложно, просьба написать все возможные варианты.


#4

Ну самый очевидный и правильный - это использование сервера.

Для вашего случая, вам нужно создать промежуточную таблицу, которая будет хранить ID юзера, ID урока. При формировании списка уроков для конкретного юзера, вам нужно будет получить список его уроков из новой таблицы и во время отображения статуса проверять, есть ли данный урок в полученных результатах и выводить соответствующий статус.

Примерно так

class User {
    var id: Int!
}
class Lesson {
    var id: Int!
}
class UserLesson {
    var userId: Int!
    var lessonId: Int!
}

class ViewController {
    // получаете список всех уроков
    var lessons: [Lesson] = []
    // получаете список уроков для конкретного юзера
    var userLessons: [UserLesson] = []
    // в методе формирования списка данных, допустим в таблице
    func tableView(cellForRowAt) {
        let cell = ...
        let lesson = lessons[indexPath.row]
        let lessonExist = userLessons.first { $0.lessonId == lesson.id } != nil
        cell.statusLabel.text = lessonExist ? "Completed" : "Not completed"
    }
}

Только учтите, за таблицей UserLesson вам нужно будет следить самому, т.е. добавлять/удалять записи.


#5

а вы не подскажите как правильно выпустить приложение с бд реалм?
нужно создать метод при первом старте в котором идет запись в бд?
или добавить готовую бд в проект?
насколько я правильно понял, бд создается только при первой записи в нее, в папке Documents.


#6

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