2016-03-19 48 views
0

專家,保存經過地位的UITableViewXamarin.iOS - NSUserDefaults的使用

請參見下面的,因爲我有一個表,要保存在NSUserDefaults的Xamarin.iOS內的表的檢查狀態。你將如何去保存檢查狀態NSUserDefaults(data.Selected = true)?理想情況下,我想要的是在每個檢查過的單元格後面,我想將該值保存到NSUserDefaults中。然後,如果用戶終止應用程序,那麼他們在終止應用程序之前選擇的值將被加載。任何幫助將不勝感激!

我有以下TableSource類:

namespace Project 
{ 
public class TableSource : UITableViewSource 
{ 
public readonly static string cellIdentifier = "cellID"; 
readonly Model _model; 

    public TableSource(Model source) 
    { 
     _model = source; 
    } 

    public override nint NumberOfSections(UITableView tableView) 
    { 
     return 1; 
    } 

    public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath) 
    { 
     var value = _model[indexPath.Row]; 
     var cell = tableView.DequeueReusableCell (cellIdentifier) ?? new UITableViewCell (UITableViewCellStyle.Default, cellIdentifier) ; 
     cell.TextLabel.Text = value.Name; 
     cell.TextLabel.Font = UIFont.FromName ("Arial", 15f); 
     cell.Accessory = value.Selected ? UITableViewCellAccessory.Checkmark : UITableViewCellAccessory.None; 
     return cell; 
    } 

    public override nint RowsInSection(UITableView tableview, nint section) 
    { 
     return _model.Count; 
    } 

    public override void RowSelected(UITableView tableView,NSIndexPath indexPath) 
    { 
     var cell = tableView.CellAt(indexPath); 
     var data = _model[indexPath.Row]; 

     if (data.Selected) 
      data.Selected = false; 
      cell.Accessory = UITableViewCellAccessory.None; 
      Toast.MakeText(data.Name.ToString() + " Not Checked", Toast.LENGTH_LONG).SetGravity(ToastGravity.Center).Show(); 
     } 

     else 
     { 
      data.Selected = true; 
      cell.Accessory = UITableViewCellAccessory.Checkmark; 
      Toast.MakeText(data.Name.ToString() + " Checked", Toast.LENGTH_LONG).SetGravity(ToastGravity.Center).Show() 

     } 

     cell.Selected = false; 
     tableView.ReloadData(); 
    } 

} 
} 
+1

問題是? – jbm

+0

你說明你想做什麼,並且發佈了一些代碼,但是問題是什麼?什麼是實際問題?請參閱[問]和[mcve] –

+0

對不起,我編輯了我的回覆以上陳述這個問題。 – pkozlowski

回答

1

存儲/讀取一個boolean NSUserDefaults的從到/是相當容易:

// Store 
bool value = data.Selected; 
string key = string.Format("TableName{0}",indexPath.Row); // Some unique name 
NSUserDefaults.StandardUserDefaults.SetBool (value, key); 
// Fetch 
bool checked = NSUserDefaults.StandardUserDefaults.BoolForKey (key); 

然而,NSUserDefaults的使用對於這似乎有點苛刻。 爲什麼不考慮將用戶的選擇保存到App的Cache文件夾中的JSON文件?

+0

非常感謝!我確實採取了通過JSON文件跟蹤選擇的方法。完美的作品。 – pkozlowski

+0

@pkozlowski不客氣。 :) –