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

Passing an managedObjectContext from one ViewController to another ViewController in Swift?

我当前的项目是 Swift 中创建注释的 Core Data 项目。我正在尝试从 prepareForSegue 中的 currentVC 设置我的 destinationVC 的 managedObjectContext 并且我试图弄清楚如何在 Swift.[=31= 中做到这一点]

我使用 Apple 的 "canned code" 在 Swift 中设置了一个 CoreData 项目。 CoreData 堆栈设置在 AppDelegate.swift.

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

应用程序打开时的初始视图是主从 VC 设置,显示我的托管对象上下文中的对象。 有效。 我可以单击注释,它会显示在 DetailViewController 上。这主要是 "canned" 代码 Xcode 在我开始项目时创建的。

我在 MasterViewController 上创建了一个 UIBarButtonItem "Add" 按钮,但我不知道如何通过 MasterVCmanagedObjectContextdestinationViewController。当我单击它时,它会按原样转到 DetailViewController.

这是我的 MasterVC 的属性:

var detailViewController: DetailViewController? = nil
var addNoteViewController:AddNoteViewController? = nil  // I added this
var managedObjectContext: NSManagedObjectContext? = nil

这是我在 MasterViewController 中的 prepareForSegue 方法。

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
    }
}

我想我还需要在 MasterVCprepareForSegue 可以设置的 AddNoteVC 上添加一个 属性。那么我如何在 Swift 中做到这一点?

要将 属性 添加到您的 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
}

谜底已解:

我在AddNoteViewController中添加了这行代码,MasterViewController.swift

中的prepareForSegue没有任何内容

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