将一个ViewController中的managedObjectContext传递给Swift中的另一个ViewController?

时间:2015-02-19 18:23:10

标签: ios swift core-data uiviewcontroller

我当前的项目是Swift中的核心数据项目,用于创建笔记。我正在尝试从destinationVC中的currentVC设置我的prepareForSegue的managedObjectContext,我正试图弄清楚如何在Swift中执行此操作。

我使用Apple的“固定代码”在Swift中设置CoreData项目。 CoreData堆栈在AppDelegate.swift

中设置

目前,如果托管对象上下文中没有注释,我创建了一种在AppDelegate中生成虚拟注释的方法。 有效。

应用程序打开时的初始视图是Master-Detail VC设置,它显示我的托管对象上下文中的对象。 有效。我可以点击一个注释,它会显示在DetailViewController上。这主要是Xcode在我启动项目时创建的“预制”代码。

我在UIBarButtonItem上创建了MasterViewController“添加”按钮,但我无法弄清楚如何将MasterVC的{​​{1}}传递给managedObjectContext 1}}。当我点击它时,它应该按照destinationViewController

进行分割

以下是我DetailViewController的属性:

MasterVC

这是var detailViewController: DetailViewController? = nil var addNoteViewController:AddNoteViewController? = nil // I added this var managedObjectContext: NSManagedObjectContext? = nil 中的prepareForSegue方法。

MasterViewController

我想我还需要在override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if segue.identifier == "showDetail" { if let indexPath = self.tableView.indexPathForSelectedRow() { let object = self.fetchedResultsController.objectAtIndexPath(indexPath) as! NSManagedObject let controller = (segue.destinationViewController as! UINavigationController).topViewController as! DetailViewController controller.detailItem = object controller.navigationItem.leftBarButtonItem = self.splitViewController?.displayModeButtonItem() controller.navigationItem.leftItemsSupplementBackButton = true } } if segue.identifier == "addNote" { println("segue.identifier is addNote") // I think I need to add stuff here so the destination VC "sees" the managedObjectContext } } AddNoteVC可以设置的MasterVC上添加一个属性。那我怎么在Swift中做到这一点?

2 个答案:

答案 0 :(得分:3)

要向AddNoteViewController添加媒体资源,只需添加var

即可
import CoreData

class AddNoteViewController: UIViewController {

    var managedObjectContext : NSManagedObjectContext?

然后你可以在你的segue中设置这个属性:

if segue.identifier == "addNote" {
    println("segue.identifier is addNote")
    // I think I need to add stuff here so the destination VC "sees" the managedObjectContext

    let controller = (segue.destinationViewController as! UINavigationController).topViewController as! AddNoteViewController
    controller.managedObjectContext = managedObjectContext
}

答案 1 :(得分:0)

神秘解决了:

我将这行代码添加到AddNoteViewController,而prepareForSegue中的MasterViewController.swift中没有任何内容

let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext