2017-06-21 33 views
2

我有一個名爲'Settings'的Realm類,主鍵爲'Settings'。通過這種方式,我只能在Settings Realm中創建一條記錄。 Settings類包含幾個需要在應用程序生命週期中訪問的變量(I.e 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 

} 

什麼是做到這一點的最好方法是什麼? 謝謝!

回答

0

如果我是你,我會只是走了UserDefaults

的接口給用戶的默認數據庫,在那裏您在您的應用程序調用持久地存儲在給定 設備上 鍵 - 值對。

使用UserDefaults(的.plist)存儲數據會有點昂貴的用戶,就好像它們備份設備,the data stored in Document folder will also be backed up,從@馬特。但是,如果您想要保存應用程序的狀態,則應該使用UserDefaults,因爲它將通過iCloud在用戶設備中同步。

應用程序可以使用iCloud的key-value存儲,分享少量 數據與用戶的其他計算機和 iOS設備上自身的其它實例。例如,雜誌應用可能會存儲當前問題 以及用戶正在閱讀的頁碼,以便在啓動時 應用的其他實例可以打開到相同的頁面。

// Set User Preference 
UserDefaults.standard.set("VALUE", forKey: "KEY") 
UserDefaults.standard.synchronize() 

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

我同意,用於存儲這樣的簡單值和只存儲模型類的一個實例,UserDefaults似乎是一個更好的辦法。 –

+0

感謝您的信息。在實現Realm之前,我使用了UserDefaults,它工作正常。我開始使用Realm來處理更大的數據庫的同時,因爲通過在用戶的反饋電子郵件中包含Settings域,可以輕鬆排除錯誤。當我同步Realm中沒有看到的UserDefaults時,我也看到了一些延遲(獲取和設置值)。如果這是推薦的方法,我會考慮切換回去!謝謝! – fisher

+0

@fisher好吧,如果您已經嘗試過這兩種方法,並且您發現Realm速度更快,那麼堅持使用它。一般來說,UserDefaults應該更容易用於這樣一個簡單的模型,並且也可以更快,但是如果你對Realm的使用速度更快,並且使用起來也更容易,那麼你不應該改變這種方法。 –

相關問題