因此,我不想使用用户默认设置,而是要使用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对象,这不是我想要的。我无法使用文档澄清任何内容。任何帮助将不胜感激。
答案 0 :(得分:0)
如果查看示例领域提供的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")
}
答案 1 :(得分:0)
当我尝试保存用户会话对象时,我在项目中遇到了类似的问题。如果要保存唯一对象,请重写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
}
希望它会对别人有帮助。