传递相同的对象上下文2两个单独的视图控制器

时间:2015-09-03 09:17:55

标签: swift core-data

我有一个从一个视图控制器传递到另一个视图控制器的托管对象第一遍正常工作,但是当我设置关系后尝试传递下一个对象时,它不会发送任何内容并返回为零或者如果我尝试使用其他方法返回语法错误。我用于视图控制器的代码如下

查看控制器1,第一个对象集:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if let identifier = segue.identifier {
        switch identifier {
        case "popOver":
            if let VC = segue.destinationViewController as? ClassDeckNameViewController
            {
                if let ppc = VC.popoverPresentationController {
                    VC.modalPresentationStyle = UIModalPresentationStyle.Popover
                    ppc.permittedArrowDirections = UIPopoverArrowDirection.Any
                    ppc.delegate = self

                }

                VC.classSave = (sender as! ClassSelection)
            }
        default: break
        }
    }

}
@IBAction func buttonPriest(sender: AnyObject) {


    let entity =  NSEntityDescription.entityForName("ClassSelection", inManagedObjectContext: classMOC!)

    let newObject = ClassSelection(entity: entity!,insertIntoManagedObjectContext: classMOC)

    newObject.classname = "Priest"

    var error: NSError?

    if let err = error {

        println(err)

    } else {

        classMOC?.save(&error)

        self.performSegueWithIdentifier("popOver", sender: newObject)


    }

}

这会将没有问题的对象传递给第二个视图控制器,但这是一个不会再传递给最终呈现控制器的用户,为用户提供“Deck”的最终选择:

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

    if segue.identifier == "showCardSelection" {
        let detailVC: CardSelectionViewController = segue.destinationViewController as! CardSelectionViewController
        detailVC.passedDeckObject = (sender as! Deck)
    }
}
@IBAction func enterButton(sender: AnyObject) {

    let entityDescription = NSEntityDescription.entityForName("Deck",inManagedObjectContext: managedObjectContext!)

    let storeDeck = Deck(entity: entityDescription!,insertIntoManagedObjectContext: managedObjectContext)

    storeDeck.deckname = usersDeckName.text
    storeDeck.classSelected = classSave!

    var error: NSError?

    managedObjectContext?.save(&error)

    if let err = error {

        status.text = err.localizedFailureReason


    } else {

        usersDeckName.text = ""
        status.text = "Deck Saved"
        self.performSegueWithIdentifier("showCardSelection", sender: storeDeck)

    }

}

我使passDeckObject成为Deck类型的变量?在最终视图控制器中设置最终关系方法我知道我做错了什么但我不确定是什么!任何帮助都会很棒!

1 个答案:

答案 0 :(得分:0)

这看起来是一个配置错误的问题,直接在故事板中触发segue而不是调用您的代码。因此,sender是一个按钮,而不是您期望的新实体实例。

要修复此问题,请断开故事板中的segue并将该按钮连接到视图控制器中的操作方法(如果它已经不存在)。