我有一个名为"设置"的领域类,主键为"设置"。这样,我在设置领域中将只有一条记录。Settings 类包含几个变量(即 showDetailedCell (bool(、用户名(字符串(、appColor (字符串((,我需要在应用程序的生命周期中多次访问这些变量。他们还必须保持最新状态。例如。我有一个表视图,如果显示详细单元格为真,则在单元格中显示详细信息。如果用户在设置中关闭此功能,则应使用新设置的值更新表视图。这就是我现在的做法,以确保我始终拥有最新的价值,但我认为它不是很有效:
var _generalSettings : Settings?
var generalSettings : Settings? {
get {
if self._generalSettings == nil || self._generalSettings?.isInvalidated == true {
self._generalSettings = try? Settings.getNewOrExisting().object
}
self._generalSettings?.realm?.refresh()
return self._generalSettings
}
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> RosterCell {
//Create the cell
let cell = tableView.dequeueReusableCell(withIdentifier: "MainCell", for: indexPath) as! MainCell
let showDetailed = generalSettings?.showDetailedCell ?? true
cell.setupAsDetailed = showDetailed
return cell
}
最好的方法是什么?谢谢!
如果我是你,我会选择UserDefaults
用户默认数据库的接口,用于存储 在给定应用调用期间持久地进行键值对 装置。
使用UserDefaults
(.plist(存储数据对用户来说会有点昂贵,因为如果他们备份设备,存储在文档文件夹中的数据也将从@matt备份。但是,如果要保存应用程序的状态,则应选择UserDefaults
因为它将通过iCloud在用户的设备之间同步。
应用可以使用 iCloud 键值存储来共享少量 用户其他计算机上自身其他实例的数据,以及 苹果设备。例如,杂志应用可能会存储当前问题 和页码被用户读取,以便 应用程序可以在启动时打开到同一页面。
// Set User Preference
UserDefaults.standard.set("VALUE", forKey: "KEY")
UserDefaults.standard.synchronize()
// Get User Preference
UserDefaults.standard.value(forKey: "KEY")