Swift 2.1 - 搜索时数组为空 - 不安全展开

时间:2016-05-18 00:49:52

标签: ios swift uitextfield optional

每次在"注释","任务名称"的文本字段中输入/编辑值时,我的应用终止。和"任务长度"值。如果输入/编辑其中一个数据,则应用程序崩溃。每次都会突出显示同一行代码作为错误原因。

问题在于,当我试图搜索某个值时,我使用的数组是空的。它应该是空的,但我不知道如何纠正这个问题。您能否告诉我一种方法来解决代码中这种不安全的解包问题?

我正在使用拆分的Master-Detail视图控制器。附件是所有相关代码,来自我使用的3个不同的视图控制器。任务VC中的功能连接到主VC中的功能 - 为新任务添加新数据。

我尝试过使用do / try / catch,使用!在可选和使用IF语句,但我尝试的任何东西似乎都工作。请帮帮我

错误+调试器中突出显示的代码行:

fatal error: unexpectedly found nil while unwrapping an Optional value

textFields[0].text = detail.valueForKey("moduleName") as? String

详情视图控制器

var tasks = [NSSet]() 

var courseWork: CourseWork? {
didSet {
    dispatch_async(dispatch_get_main_queue()) {
        self.configureView()
    }

func configureView() { // Update the user interface for the detail view

if let detail = self.courseWork { 

    self.title = detail.valueForKey("courseWorkName")!.description 

    textFields[0].text = detail.valueForKey("moduleName") as? String //Error with this line
    textFields[1].text = detail.valueForKey("markAwarded") as? String 


func setupUIElements() {

//text fields
for textF in textFields {
    textF.delegate = self
}
textView.delegate = self

}

@IBOutlet var textFields: [UITextField]!

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
    for (index, tf) in textFields.enumerate() {
        if textField == tf {
            saveTHeCourseWork(index == 0 ? "moduleName" : "markAwarded", value: textFields[index].text!)
        }
    }
    return true
}

@IBOutlet weak var textView: UITextView!

func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
    if text == "\n" { 

        saveTHeCourseWork("notes", value: textView.text) 

        textView.resignFirstResponder() 
    }
    return true
}

任务VC:

@IBOutlet weak var taskName: UITextField! 
@IBOutlet weak var taskLength: UITextField!
@IBOutlet weak var taskNotes: UITextView!

@IBAction func saveTask(sender: UIButton) { // function saves and updates data inputted into Task


        if task == nil { // task is blank, create new one
            MasterViewController().insertNewTask(taskName.text!, length: taskLength.text, startDate: startDate.date, dueDate: dueDate.date, notes: taskNotes.text, course: courseWork!) 

        } else {
            MasterViewController().updateTaskValues(taskName.text!, length: taskLength.text, startDate: startDate.date, dueDate: dueDate.date, notes: taskNotes.text, task: task!) // sends to Master Detail View Controller

            print ("Update task")
        }

掌握VC:

func insertNewTask(name: String, length: String?, notes: String, course: CourseWork) {
    if let context = course.managedObjectContext {
        let task = NSEntityDescription.entityForName("Task", inManagedObjectContext: context)
        let newTask = NSManagedObject(entity: task!, insertIntoManagedObjectContext: context)
        newTask.setValue(name, forKey: "taskName") 
        newTask.setValue(notes, forKey: "notes")
        course.mutableSetValueForKey("tasks").addObject(newTask)
        // Save data to Object
        do {
            try course.managedObjectContext?.save()

        } catch {
            abort()
        }

0 个答案:

没有答案