I am a novice programmer who has started to learn Swift to make apps.
So my question is: "How can I store an array of my objects using NSUserDefaults". Originally, I was looking at this question posted on stack overflow. However, I don't really understand exactly how they did it. After searching on youtube with really no success, I have no choice but ask a question on stack overflow. (I'm hesitant because people often vote my questions off as I'm a beginner asking stupid questions)
So here goes.
I am making a todo list using swift. I have one main class called Task Manager that contains an array of Task objects.
Task Manager (Functionality)
- Contains the array of tasks
 - Saves and Loads data using NSUserDefaults in order to store the tasks
 
Task (Functionality)
- Stores the name and description of a task
 - Not sure if it should have anything else
 
So now, after looking at several online tutorials, here is what i have. (It doesn't work)
Task Manager: Raw Code
//
//  TaskManager.swift
//  ToDoList
//
//  Created by Ronak Shah on 7/5/15.
//  Copyright (c) 2015 com.ShahIndustries. All rights reserved.
//
import UIKit
var taskMgr : TaskManager = TaskManager()
class TaskManager: NSObject{
    var tasks: [Task]? = [Task]()
    var time = 1 //debug, ignore
    override init(){
        super.init()
        let taskData = NSUserDefaults.standardUserDefaults().objectForKey("tasks") as? NSData
        if let taskData = taskData {
            let taskArray = NSKeyedUnarchiver.unarchiveObjectWithData(taskData) as? [Task]
            if let taskArray = taskArray {
                tasks = taskArray
            }
        }
    }
    func addTask(taskName : String, taskDescription : String){
        var newTask = Task(taskName: taskName , taskDescription: taskDescription)
        tasks!.append(newTask)
    }
    func getTaskAtIndex(index: Int) ->Task {
        return tasks![index]
    }
    func saveData() {
        let ud = NSUserDefaults.standardUserDefaults()
        ud.setObject(NSKeyedArchiver.archivedDataWithRootObject(taskMgr), forKey: "tasks")
    }
    required init(coder aDecoder: NSCoder) {
        if let dataTasks = aDecoder.decodeObjectForKey("tasks") as? [Task] {
            self.tasks = dataTasks
        }
    }
    func encodeWithCoder(aCoder: NSCoder) {
        if let tasks = self.tasks {
            aCoder.encodeObject(tasks, forKey: "tasks")
        }
    }
    func loadData() {
        let ud = NSUserDefaults.standardUserDefaults()
        if let data = ud.objectForKey("tasks") as? NSData {
            //not sure how to get the data
        }
    }
}
Task: Raw Code
//
//  Task.swift
//  ToDoList
//
//  Created by Ronak Shah on 7/5/15.
//  Copyright (c) 2015 com.ShahIndustries. All rights reserved.
//
import Foundation
class Task :NSObject{
    var name : String?
    var desc : String?
    init (taskName : String, taskDescription : String){
        self.name = taskName
        self.desc = taskDescription
    }
    required init(coder aDecoder: NSCoder) {
        if let dataDesc = aDecoder.decodeObjectForKey("desc") as? String {
            self.desc = dataDesc
        }
        if let dataTitle = aDecoder.decodeObjectForKey("name") as? String {
            self.name = dataTitle
        }
    }
    func encodeWithCoder(aCoder: NSCoder) {
        if let name = self.name {
            aCoder.encodeObject(name, forKey: "name")
        }
        if let desc = self.desc {
            aCoder.encodeObject(desc, forKey: "desc")
        }
    }
}
So how might I store my array of tasks (named tasks in Task Manager)?