2016-02-02 42 views
0

我在使用NSUserDefaults在Swift中創建書籤列表在tableView中遇到了一些麻煩。保存和顯示部分我有,但刪除保存的字符串和從另一個視圖控制器重新加載tableView是我被困在很長一段時間。保存並從一個ViewController刪除NSUserDefaults到另一個 - Swift 2

基本上,我只是想用一個按鈕保存一個字符串到tableView中的另一個視圖控制器。當選擇按鈕時,將字符串保存到tableView。當按鈕取消選擇時,從tableView中刪除相同的字符串。

收藏 - 視圖 - 控制器

import UIKit 

class BookmarkController: UIViewController { 
    var bookmark: String = "Hello World" 

    @IBOutlet var myButton: UIButton! 

    @IBAction func buttonAction(sender: UIButton!) { 

     if myButton.backgroundColor == UIColor.grayColor() { 
      myButton.backgroundColor = UIColor.blueColor() 
      favoritesList.append(bookmark) 
      NSUserDefaults.standardUserDefaults().setObject(favoritesList, forKey:"favoritesList") 
      NSUserDefaults.standardUserDefaults().synchronize() 

    } 
    else if myButton.backgroundColor == UIColor.blueColor() { 
      myButton.backgroundColor = UIColor.grayColor() 
      NSUserDefaults.standardUserDefaults().removeObjectForKey("favoritesList") 
      NSUserDefaults.standardUserDefaults().synchronize()      
     } 

    } 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     if (NSUserDefaults.standardUserDefaults().objectForKey("favoritesList") != nil) { 
     myButton.backgroundColor = UIColor.blueColor() 
    }else{ 
     myButton.backgroundColor = UIColor.grayColor() 

    } 
    } 

} 

視圖控制器具有的tableView(保持數據)

import UIKit 

var favoritesList = [String]() 

class SecondViewController: UIViewController, UITableViewDelegate { 

     @IBOutlet var toDoListTable: UITableView! 

    override func viewDidLoad() { 
    super.viewDidLoad() 
     if NSUserDefaults.standardUserDefaults().objectForKey("favoritesList") != nil { 

     favoritesList = NSUserDefaults.standardUserDefaults().objectForKey("favoritesList") as! [String] 

     } 

     } 

     func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{  
      return favoritesList.count  
     } 

     func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{ 

      let cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "Cell") 

      cell.textLabel!.font = UIFont.systemFontOfSize(14.0) 
      cell.textLabel!.numberOfLines = 0 
      cell.textLabel!.text = favoritesList[indexPath.row] 
      return cell 
      } 

     func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath){ 
      if editingStyle == UITableViewCellEditingStyle.Delete{ 
       favoritesList.removeAtIndex(indexPath.row) 
       NSUserDefaults.standardUserDefaults().setObject(favoritesList, forKey: "favoritesList") 
       toDoListTable.reloadData() 
      } 

     override func viewDidAppear(animated: Bool) { 
      toDoListTable.reloadData() 
     } 
    } 
+0

如果你有'if(true){set - > sync()} else {set - > sync()}',你應該把它改爲if(true){set} else {set} sync ()' - 清潔代碼 – iSkore

+0

不知道這是否真的是你的問題,但我注意到的一件事是你正在刪除洞列表? 'NSUserDefaults.standardUserDefaults()。removeObjectForKey(「favoritesList」)''而不僅僅是按鈕的值? – Lucho

+1

不需要強制同步 –

回答

0

BookmarkController就像你在SecondViewController你不填充favoritesList。在操作它之前,您應該在viewDidLoad中加載favoritesList

+0

是的,我試過。我一直感到困惑,因爲如果我有一堆字符串存儲在favoritesList中,並且我將它們全部加載到當前的書籤中,我該如何操縱當前正在處理的字符串Im。有沒有辦法在NSUserdefaults檢查一個setObject等於一個確切的值,然後操縱?我知道你可以'如果NSUserDefaults.standardUserDefaults()。objectForKey(「favoritesList」)!= nil',但只是檢查收藏夾列表中是否有任何內容,並且不檢查當前字符串是否在favoritesList中。 – kelsheikh

+0

您可以遍歷favoritesList數組並查找當前正在處理的字符串。然後根據您是要刪除它還是替換它,可以根據需要使用removeObject或replaceObjectAtIndex,並將該數組設置回首選項。 –

相關問題