Как сохранить только один экземпляр класса в царстве - PullRequest
0 голосов
/ 26 июня 2018

Поэтому вместо использования пользовательских настроек по умолчанию я хочу сохранить некоторые настройки с помощью Realm.

Я создал класс для импорта настроек. Фонд импорта RealmSwift

class NutritionSettings: Object {
    @objc dynamic var calories: Int = 0
    @objc dynamic var proteins: Int = 0
    @objc dynamic var carbohydrates: Int = 0
    @objc dynamic var fats: Int = 0
}

Но, на мой взглядКонтроллер Я не знаю, как сохранить только один его экземпляр. Я пробовал

let realm = try! Realm()
let settings = NutritionSettings()

    do {
    try realm.write{
        settings.calories = cals!
        settings.carbohydrates = carbs!
        settings.fats = fats!
        settings.proteins = proteins!
        }
    } catch {
        print("error saving settings")
    }

Поскольку я знаю, что создание realm.add просто добавит еще один объект NutritionSettings, который мне не нужен.Я не смог ничего прояснить, используя документацию.Любая помощь будет оценена спасибо.

Ответы [ 2 ]

0 голосов
/ 06 июля 2019

Я столкнулся с похожей проблемой в своем проекте, когда попытался сохранить объект сеанса пользователя.Если вы хотите сохранить уникальный объект, переопределите метод класса primaryKey () и установите для него уникальный ключ.

@objcMembers class NutritionSettings: Object {

     static let uniqueKey: String = "NutritionSettings"

     dynamic var uniqueKey: String = NutritionSettings.uniqueKey
     dynamic var calories: Int = 0

     override class func primaryKey() -> String? {
          return "uniqueKey"
     }
}

Затем, чтобы получить объект, просто используйте уникальный ключ.

// Saving

let settings = NutritionSettings()
settings.calories = 100

do {
    let realm = try Realm()
    try realm.write {
        realm.add(settings, update: .modified)
    }
} catch {
    // Error handling
}

// Reading

var settings: NutritionSettings?

do {
    let realm = try Realm()
    let key = NutritionSettings.uniqueKey
    settings = realm.object(ofType: NutritionSettings.self, forPrimaryKey: key)
} catch {
    // Error handling
}

if let settings = settings {
    // Do stuff
}

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 26 июня 2018

Если вы посмотрите на пример царства, предоставляющий https://realm.io/docs/swift/latest, вы увидите, что для того, чтобы сохранить только один объект, вам все равно придется добавить.После того, как вы добавили объект в базу данных, вы можете извлечь этот объект и выполнить запись, которая изменяет внутренние свойства

let realm = try! Realm()
let settings = NutritionSettings()
settings.id = 1
do {
try realm.write{
     realm.add(settings)

    }
} catch {
    print("error saving settings")
}

Затем вы можете выбрать и изменить тот единственный экземпляр, который вы сохранили

let realm = try! Realm()
let settings = realm.objects(NutritionSettings.self).filter("id == 1").first

do {
try realm.write{
    settings.calories = cals!
    settings.carbohydrates = carbs!
    settings.fats = fats!
    settings.proteins = proteins!
    }
} catch {
    print("error saving settings")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...