Недавно я узнал о CoreData в Swift. Моя цель - отправить значение одного объекта «editContact» в класс «AllContactTableViewController» в качестве кода ниже.Передача объекта с одного диспетчера viewController на другой viewcontroller получил нуль в swift
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let appDelegate:AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
let managedObjectContext:NSManagedObjectContext = appDelegate.managedObjectContext!
let entity = NSEntityDescription.entityForName("Contact", inManagedObjectContext: managedObjectContext)
var request = NSFetchRequest(entityName: "Contact")
request.returnsObjectsAsFaults = false
var results: NSArray = managedObjectContext.executeFetchRequest(request, error: nil)!
let editContactView : EditContactTableViewController = EditContactTableViewController()
var editContact : Contact = results.objectAtIndex(indexPath.row) as Contact
editContactView.editContact = editContact
println("\(editContactView.editContact)")
}
к другому ViewController под названием «EditContactTableViewController» (как код ниже)
class EditContactTableViewController: UITableViewController {
var editContact : Contact!
override func viewDidLoad() {
super.viewDidLoad()
firstNameField.text = self.editContact.firstName
lastNameField.text = self.editContact.lastName
phoneField.text = self.editContact.phone
emailField.text = self.editContact.email
companyField.text = self.editContact.company
addressField.text = self.editContact.address
}
}
тогда это вызвало ошибку как «Фатальная ошибка: неожиданно обнаружили ноль в то время разворачивания необязательное значение»
в журнал. Кажется, значение объекта, называемого «editContact» в этом классе, изменилось на nil.
У вас есть идея, как исправить эту проблему?
Как вы переходите от первого контроллера табличного представления к EditContactTableViewController? – rdelmar
я использовал SEGUE метод, как показано ниже: переопределение Func prepareForSegue (SEGUE: UIStoryboardSegue, отправитель: AnyObject) { , если segue.identifier == "editContact" { запроса вар = NSFetchRequest (EntityName: "Контакт") запросу .returnsObjectsAsFaults = false var indexPath: NSIndexPath = self.tableView.indexPathForSelectedRow()! пусть editContact: Контакт = results.objectAtIndex (indexPath.row) в контакт пусть editContactView: EditContactTableViewController = segue.destinationViewController в EditContactTableViewController editContactView.editContact = editContact } } –
Вы не должны осуществлять как didSelectRowAtIndexPath и prepareForSegue , Если вы используете segues, вам нужно всего лишь реализовать prepareForSegue. Вы создаете новый экземпляр EditContactTableViewController в didSelectRow, что не очень хорошо. – rdelmar