Bizimana Elie
Bizimana Elie

Reputation: 13

My cells are duplicating themselves

I am new to swift and I am trying to make this note app. I have split view controller that goes in my first view controller and that view controller connects to a table view controller. Everything works perfectly is just that when I launch the app I have all the notes like I want but when I try to go back to my first view controller and come back to my table view controller, all the notes are duplicated every single time I do it. I tried everything I can try, is there anyone who can help me my MasterViewController is

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
    }
}

My loadNotes function is

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)
        }
    }
}

Upvotes: 0

Views: 47

Answers (1)

rmaddy
rmaddy

Reputation: 318934

Your loadNotes method keeps appending. The first line of loadNotes should be:

allNotes = [Note]()

Then it starts with an empty array and fills it up.

And why is loadNotes a static method? That's a bad design. Make Notes a normal class and make loadNotes an instance method.

On an unrelated note (no pun intended), do not use UserDefaults to store app data. Only use it to store little bits of information.

Upvotes: 1

Related Questions