【问题标题】:Saving and removing NSUserDefaults from one ViewController to another - Swift 2将 NSUserDefaults 从一个 ViewController 保存和删除到另一个 - Swift 2
【发布时间】:2016-02-02 13:54:48
【问题描述】:

我在使用 NSUserDefaults 在 tableView 中创建书签列表时遇到了一些麻烦。我拥有的保存和显示部分,但它删除保存的字符串并从另一个视图控制器重新加载 tableView 是我被卡住了很长时间的地方。

基本上,我只是想将带有按钮的字符串保存到 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()
         }
     }

【问题讨论】:

  • 一个建议,如果你有if (true) { set -> sync () } else { set -> sync () },你应该把它改成if (true) { set } else { set } sync () - 更简洁的代码
  • 不知道这是否真的是您的问题,但我注意到的一件事是您正在删除孔列表? NSUserDefaults.standardUserDefaults().removeObjectForKey("favoritesList") 而不仅仅是按钮值?
  • 无需强制同步
  • @LeoDabus 每次按下按钮时我都会设置NSUserDefaults.standardUserDefaults().synchronize()。我觉得 tableView 在那之后由于某种原因没有重新加载。
  • 可以全部删除。问题是别的

标签: ios swift uitableview swift2 nsuserdefaults


【解决方案1】:

BookmarkController 中,您不会像在SecondViewController 中那样填充favoritesList。在操作之前,您应该在 viewDidLoad 中加载 favoritesList

【讨论】:

  • 是的,我试过了。我一直感到困惑,因为如果我有一堆字符串存储在收藏夹列表中,并且我将它们与我正在添加书签的当前字符串一起加载,我该如何操作我当前正在处理的字符串。 NSUserdefaults 中是否有办法检查等于精确值的 setObject 然后进行操作?我知道你可以' if NSUserDefaults.standardUserDefaults().objectForKey("favoritesList") != nil' 但这只是检查 favouritesList 中是否有任何内容,而不检查当前字符串是否在 favoritesList 中。
  • 您可以遍历 favoritesList 数组并找到您当前正在处理的字符串。然后根据您是要删除它还是替换它,您可以根据需要使用 removeObject 或 replaceObjectAtIndex 并将数组设置回首选项。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-18
  • 2014-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多