将自定义类附加到数组以覆盖

时间:2016-02-15 11:07:34

标签: arrays swift append overwrite

我有一个名为Subject的自定义类,我试图初始化一个版本并附加到一个数组,但是当我将一个附加到一个数组时,它会覆盖所有准备就绪的所有主题。例如这段代码

var things:[Subject] = []
    things.append(Subject(initName: "1", initTeacher: "1", initClassroom: "1"))
    things.append(Subject(initName: "2", initTeacher: "2", initClassroom: "2"))
    print(things[0].name)
    print(things[1].name)

正在打印Optional("2") Optional("2")时打印'Optional("1") Optional("2")'

这是我的自定义类

的代码
class Subject: NSManagedObject{

var name: String?
var teacher: String?
var classroom: String?

init(initName: String, initTeacher: String, initClassroom: String){
    name = initName
    teacher = initTeacher
    classroom = initClassroom
}

func save() -> Bool{
    if(name == "" || teacher == "" || classroom == ""){
        return false
    }else{

        let appDelgate = UIApplication.sharedApplication().delegate as? AppDelegate
        let managedContext = appDelgate?.managedObjectContext

        let entity = NSEntityDescription.entityForName("Subject", inManagedObjectContext: managedContext!)
        let subject = NSManagedObject(entity: entity!, insertIntoManagedObjectContext: managedContext)

        subject.setValue(name, forKey: "name")
        subject.setValue(teacher, forKey: "teacher")
        subject.setValue(classroom, forKey: "classroom")

        do{
            try managedContext?.save()
        }catch let error as NSError{
            print("Failed because of \(error)")
        }

        return true
    }
}

func edit(newName: String, newTeacher: String, newClassroom: String) -> Bool{
    let appDelgate = UIApplication.sharedApplication().delegate as? AppDelegate
    let managedContext = appDelgate?.managedObjectContext

    let fetchRequest = NSFetchRequest(entityName: "Subject")
    fetchRequest.predicate = NSPredicate(format: "name = %@", name!)
    do{
        let fetchResults = try managedContext?.executeFetchRequest(fetchRequest)
        let editingSubject = fetchResults![0] as! NSManagedObject

        editingSubject.setValue(newName, forKey: "name")
        editingSubject.setValue(newTeacher, forKey: "teacher")
        editingSubject.setValue(newClassroom, forKey: "classroom")

        do{
            try managedContext?.save()
            return true
        }catch{
            return false
        }
    }catch{
        return false
    }
}}

感谢您的帮助

0 个答案:

没有答案