首页 > 解决方案 > 如何在领域中只保存一个类实例

问题描述

因此,我不想使用用户默认值,而是想使用 Realm 保留一些设置。

我为设置创建了一个类 import Foundation import 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 对象,这不是我想要的。我无法使用文档来澄清任何事情。任何帮助将不胜感激。

标签: swiftrealm

解决方案


当我尝试保存用户会话对象时,我在项目中遇到了类似的问题。如果要保存唯一对象,请覆盖 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
}

希望它会帮助某人。


推荐阅读