我当前的项目是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中做到这一点?
答案 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