我的细胞正在复制自己

时间:2017-07-25 21:10:59

标签: swift uitableview

我是swift的新手,我正在努力制作这个笔记应用。我有拆分视图控制器进入我的第一个视图控制器,该视图控制器连接到表视图控制器。一切正常,就是当我启动应用程序时,我有我想要的所有笔记但是当我尝试回到我的第一个视图控制器并返回到我的表视图控制器时,所有注释都是每次我都重复它。我尝试了所有可以尝试的东西,是否有人可以帮助我 我的MasterViewController是

import UIKit

class MasterViewController: UITableViewController {

var detailViewController: DetailViewController? = nil

override func viewDidLoad()
{
    super.viewDidLoad()
    Note.loadNotes()  // The problem is here, I think
    noteTable = self.tableView

    // Do any additional setup after loading the view, typically from a nib.
    let addButton = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(insertNewObject(_:)))
    navigationItem.rightBarButtonItem = addButton
    if let split = splitViewController
    {
        let controllers = split.viewControllers
        detailViewController = (controllers[controllers.count-1] as! UINavigationController).topViewController as? DetailViewController
    }
}

我的loadNotes函数是

class func loadNotes()
{
    let defaults:UserDefaults = UserDefaults.standard
    let saveData: [NSDictionary]? = defaults.object(forKey: kAllNotes) as? [NSDictionary]

    if let data:[NSDictionary] = saveData
    {
        for i:Int in 0 ..< data.count
        {
            let n:Note = Note()
            n.setValuesForKeys(data[i] as! [String : Any])
            allNotes.append(n)
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您的loadNotes方法会不断添加。 loadNotes的第一行应该是:

allNotes = [Note]()

然后它以一个空数组开始并填满。

为什么loadNotes是静态方法?这是一个糟糕的设计。使Notes成为普通类,并使loadNotes成为实例方法。

在不相关的注释(无双关语)上,请勿使用UserDefaults来存储应用数据。只用它来存储一点点信息。