将 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" 按钮,但我不知道如何通过 MasterVC
的 managedObjectContext
到 destinationViewController
。当我单击它时,它会按原样转到 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
}
}
我想我还需要在 MasterVC
的 prepareForSegue
可以设置的 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
我当前的项目是 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" 按钮,但我不知道如何通过 MasterVC
的 managedObjectContext
到 destinationViewController
。当我单击它时,它会按原样转到 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
}
}
我想我还需要在 MasterVC
的 prepareForSegue
可以设置的 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