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