根据提供的答案编辑:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
selectedName = quizNames[indexPath.row]
performSegueWithIdentifier("saveSegue", sender: self)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "saveSegue" {
let inputController = segue.destinationViewController as? QAInputViewController
inputController?.quizName = selectedName
}
}
我在这里做了一些研究,试图弄清楚如何使用prepareForSegue将所选的Core Data对象从UITableView单元传递给第二个View Controller,但是我发现并尝试实现的方法并没有解决对我来说,似乎有些代码可能已经过时了。这是我想要做的:
我使用Name类型的数组填充UITableView,这是我的NSManagedObject。当我选择一个特定名称时,它会将我转到输入屏幕,在那里将提交问题和答案。我想确保提交的问题和答案保持分配给先前选择的名称。我不知道如何在prepareForSegue中设置它。我确实用关系建立了我的数据模型,所以如果我正确地做了它,一旦我理解了如何实现它就应该工作。有什么方法可以检查当前选择的名称,以便我知道输入的任何问题和答案都会保存到该名称吗?
相对于我的上述问题,我希望第二个View Controller的标题显示以前选择的名称的名称。
基本上我只是在寻找有关在Swift 2中实现此功能的指导。非常感谢您的帮助。
编辑:Passing Core Data objects from UITableViewCell to another View Controller
以上链接是我尝试实施的解决方案,对我来说不起作用。具体做法是:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "showTaskDetail" {
let detailVC: TaskDetailViewController = segue.destinationViewController as! TaskDetailViewController
let indexPath = self.tableView.indexPathForSelectedRow()
let thisTask = fetchedResultsController.objectAtIndexPath(indexPath!) as! TaskModel
detailVC.detailTaskModel = thisTask
detailVC.delegate = self
}
答案 0 :(得分:2)
我就是这样做的:
在我班级的顶部,我会有一个存储所选项目的var:
var mySecondVar = myFirstVar.ToString()
mySecondVar = mySecondVar.replace("a","u");
然后在我的tableViews didSelectRow方法:
var selectedTask: Task?
最后:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
selectedTask = tasks[indexPath.row]
performSegueWithIdentifier("showTaskDetail", sender: self)
}
但是,我更倾向于传递某种ID /名称并使用新的moc执行另一次获取而不是传递核心数据对象。
您可以通过这种方式获得更少的线程问题,如果您需要深入链接到您的应用,例如通知或其他内容,这将使事情变得更加轻松。
Mocs便宜,只需使用一次,然后将它们丢弃。