每次在"注释","任务名称"的文本字段中输入/编辑值时,我的应用终止。和"任务长度"值。如果输入/编辑其中一个数据,则应用程序崩溃。每次都会突出显示同一行代码作为错误原因。
问题在于,当我试图搜索某个值时,我使用的数组是空的。它应该是空的,但我不知道如何纠正这个问题。您能否告诉我一种方法来解决代码中这种不安全的解包问题?
我正在使用拆分的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()
}