swift - 如何在领域中只保存一个类实例
问题描述
因此,我不想使用用户默认值,而是想使用 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 对象,这不是我想要的。我无法使用文档来澄清任何事情。任何帮助将不胜感激。
解决方案
当我尝试保存用户会话对象时,我在项目中遇到了类似的问题。如果要保存唯一对象,请覆盖 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
}
希望它会帮助某人。
推荐阅读
- python - 尝试使用 Python 和 Chromedriver 从网站上抓取数据,但它返回“查找”的非类型错误
- angular - 使用 Visual Studio Code 将简单的 Angular 8 应用程序部署到 Azure
- ios - Apple 是否允许在模拟器上测试身份验证服务(Apple 登录)
- powerbi - 在 Power BI 中,如何根据使用 DAX 的度量返回的所有类别的最大值返回类别标签?
- r - 将变量分配给R中粘贴的列名称
- php - 即使没有请求,客人结帐也会创建帐户
- amazon-web-services - Curl 在机器上工作,但不在网络浏览器上
- javascript - 如何在最后将数组的元素组合到一个警告框中
- memory - 在不复制内存的情况下重复 pytorch 张量
- statistics - 这个归一化曲线是什么?常数 ^(常数 ^ 观察指数为 100)