Realm Swift - Объект не обновляется при использовании модального - PullRequest
0 голосов
/ 21 декабря 2018

Рабочий код

Внутри метода didSelectRowAt IndexPath моего tableView у меня есть вызов, который обновляет модель UserSave, которая находится в области по умолчанию.Функция структурирована следующим образом:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let UserRealm = UserSave()
    let realm = try! Realm()
    try! realm.write {
        UserRealm.articleLink = newsLink[indexPath.row]
        UserRealm.articleBody = newsData[indexPath.row]
        UserRealm.articleTitle = newsTitle[indexPath.row]
        UserRealm.articleAuthor = newsSrc[indexPath.row]
    }
    performSegue(withIdentifier: "webKitSegue", sender: self)
}

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

Код проблемы

У меня есть вторая модель, UserPrefs, которая также является частью области по умолчанию.Вызывается внутри функции exrefresh(writeToRealm: String).Функция выглядит следующим образом:

func exrefresh(passed: String) {
    let UserRealm = UserPrefs()
    let realm = try! Realm()
    try! realm.write {
        UserRealm.fetchUrl = passed
    }
    self.refreshControl!.beginRefreshing()
    self.refreshControl!.sendActions(for: .valueChanged)
}

Однако, когда эта функция выполняется, область сохраняет свои значения по умолчанию и не обновляется с новыми.

Models

// UserSave

import RealmSwift

class UserSave: Object {
    @objc dynamic var articleTitle = "Default Title"
    @objc dynamic var articleAuthor = "Default Author"
    @objc dynamic var articleLink = "https://example.com"
    @objc dynamic var articleBody = "Default Body"
}

// UserPrefs

import RealmSwift

class UserPrefs: Object {
    @objc dynamic var applicationDark = false
    @objc dynamic var fetchUrl = "https://example.com/"
}

Проблема

Я могу очень хорошо обновить модель UserSave, хотя я не могу изменить значения в UserPrefs, хотя оба они находятся вобласть по умолчанию.Я использую один и тот же код (с замененными именами) для обновления обеих моделей, и только одна работает правильно.У меня есть файл .realm, загруженный в браузере Realm, и я могу наблюдать за изменениями в UserSave.Я следовал инструкциям realm.io , и их код работает только на одной модели.

Заранее благодарен за любую помощь.

1 Ответ

0 голосов
/ 22 декабря 2018

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

Вот код для написания объекта.

func exrefresh(passed: String) {

    let UserRealm = UserPrefs()
    UserRealm.fetchUrl = passed

    let realm = try! Realm()
    try! realm.write {
        realm.add(UserRealm)
    }
}

Если вы собираетесь когда-либо иметь только один объект этого типа,тогда вот код для его обновления.

    let realm = try! Realm()
    let results = realm.objects(UserPrefs.self)
    let theOnlyOne = results.first!

    try! realm.write {
        theOnlyOne.fetchUrl = passed
    }

Это предполагает, что у вас есть правильная проверка на наличие ошибок, чтобы узнать, существует ли объект перед обновлением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...