最近,我正在學習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