最近,我正在学习Swift中的CoreData。我的目的是将下面的代码发送到类“AllContactTableViewController”中的一个对象“editContact”的值。将对象从一个视图控制器传递给另一个视图控制器在快速获取无
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)")
}
名为“EditContactTableViewController”(如下面的代码)另一个的ViewController
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”的对象的值已经变为零。
你知道如何解决这个问题吗?
你如何从第一个表视图控制器到EditContactTableViewController? – rdelmar 2014-10-20 15:20:54
我用如下方法赛格瑞: 倍率FUNC prepareForSegue(SEGUE:UIStoryboardSegue,发件人:AnyObject){ 如果segue.identifier == “editContact”{ VAR请求= NSFetchRequest(的entityName: “联系人”) 请求.returnsObjectsAsFaults = false var indexPath:NSIndexPath = self.tableView.indexPathForSelectedRow()! 让editContact:联系= results.objectAtIndex(indexPath.row)作为联系 让editContactView:EditContactTableViewController = segue.destinationViewController作为EditContactTableViewController editContactView.editContact = editContact }} 您 – 2014-10-22 08:08:50
不应该同时实现didSelectRowAtIndexPath方法和prepareForSegue 。如果你使用segues,你只需要实现prepareForSegue。你正在didSelectRow中创建一个EditContactTableViewController的新实例,这个实例不好。 – rdelmar 2014-10-22 15:00:53