Ios 使用领域数据作为应用程序设置

Ios 使用领域数据作为应用程序设置,ios,swift,realm,Ios,Swift,Realm,我有一个名为“Settings”的领域类,主键为“Settings”。这样,我在设置域中将只有一条记录。Settings类包含几个变量(即showDetailedCell(bool)、username(string)、appColor(string)),我需要在应用程序的生命周期中多次访问这些变量。他们还必须跟上时代。例如。如果showDetailedCell为true,我有一个在单元格中显示详细信息的tableView。如果用户在设置中关闭此选项,则应使用新设置的值更新tableview。我现

我有一个名为“Settings”的领域类,主键为“Settings”。这样,我在设置域中将只有一条记录。Settings类包含几个变量(即showDetailedCell(bool)、username(string)、appColor(string)),我需要在应用程序的生命周期中多次访问这些变量。他们还必须跟上时代。例如。如果showDetailedCell为true,我有一个在单元格中显示详细信息的tableView。如果用户在设置中关闭此选项,则应使用新设置的值更新tableview。我现在就是这样做的,以确保我始终拥有最新的价值,但我认为这不是很有效:

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
(.plist)存储数据对于用户来说成本有点高,就像他们从@matt备份设备一样。但是,如果你想保存应用程序的状态,你应该选择
UserDefaults
,因为它将通过iCloud在用户设备之间同步

应用程序可以使用iCloud key value store共享少量的 在用户的其他计算机上具有自身其他实例的数据,以及 iOS设备。例如,杂志应用程序可能存储当前版本 以及用户正在读取的页码,以便 应用程序启动时可以打开到同一页面


我同意,对于存储如此简单的值并且只存储模型类的单个实例,UserDefaults似乎是一个更好的方法。感谢您提供的信息。在实现Realm之前,我使用了UserDefaults,它工作得很好。在我开始为更大的数据库使用领域的同时,我切换了设置领域,因为在用户的反馈电子邮件中包含设置领域非常容易排除错误。我还看到了一些延迟(获取和设置值),当我将我没有看到的UserDefaults与Realm同步时。如果这是推荐的方法,我会考虑倒换!谢谢@fisher好吧,如果你已经用这两种方法进行了实验,并且发现Realm更快,那么就坚持使用它。一般来说,对于这样一个简单的模型,UserDefaults应该更容易使用,也可能更快,但是如果你觉得Realm更快,也更容易使用,那么你就不应该改变这种方法。使用
UserDefaults
的一大优势是当你想保存应用程序的状态时。请检查我编辑的答案。谢谢你的回复。他们将帮助我做出最后的决定。假设我继续使用领域方法。在您看来,访问我的用例中的变量的最佳实践是什么?我应该每次初始化一个新领域吗?我现在这样做的原因是因为我有时没有得到正确的值,因为变量在不同的线程中被更改了。通过在每次访问变量之前刷新领域,我总是得到更新的值。
// Set User Preference
UserDefaults.standard.set("VALUE", forKey: "KEY")
UserDefaults.standard.synchronize()

// Get User Preference
UserDefaults.standard.value(forKey: "KEY")