ios – 从UITableView中选择行时,将Core Data对象传递给另一个视图控制器

编辑基于提供的答案:

    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中设置它.我确实用关系建立了我的数据模型,所以如果我正确地做了它,一旦我理解了如何实现它就应该工作.有什么方法可以检查当前选择的名称,以便我知道输入的任何问题和答案将保存到该名称?
>相对于我的上述问题,我希望第二个视图控制器的标题显示以前选择的名称的名称.

基本上我只是想在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

    }

最佳答案 我是这样做的:

在我的班级顶部,我将有一个存储所选项目的var:

var selectedTask: Task?

然后在我的tableViews didSelectRow方法中:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    selectedTask = tasks[indexPath.row]
    performSegueWithIdentifier("showTaskDetail", sender: self)
}

最后:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    if segue.identifier == "showTaskDetail" {
        let detailVC: TaskDetailViewController = segue.destinationViewController as! TaskDetailViewController
        detailVC.detailTaskModel = selectedTask
        detailVC.delegate = self
    }
}

但是,我更倾向于传递某种ID /名称并使用新的moc执行另一次获取而不是传递核心数据对象.

通过这种方式,您可以减少线程问题,如果您需要深入链接到应用程序(例如通知或其他内容),这将使事情变得更加容易.

Mocs便宜,使用一次,扔掉它们.

点赞