Ich versuche, eine Kontaktseite einzurichten, wo ich Kontakte hinzufügen/bearbeiten kann. Ich bekomme jedoch einen Nullwert, wenn ich versuche, CoreDataStack.context aufzurufen.Verwalteter Kontext von CoreDataStack bleibt nicht durch die Navigationsleiste
Hier entsteht es in den AppDelegate
lazy var coreDataStack = CoreDataStack()
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
UINavigationBar.appearance().barTintColor = navigationMainColor
UINavigationBar.appearance().tintColor = navigationMainItemColor
let navigationController = window!.rootViewController as! UINavigationController
let listViewController = navigationController.topViewController as! ViewController
listViewController.coreDataStack = coreDataStack
return true
}
ich es zu meinen ersten View-Controller übergeben und innerhalb des RootViewController ich eine Taste, die mich zu einem anderen Ansicht-Controller sendet. Im rootViewController ist der CoreDataStack-Kontext immer noch vorhanden, wenn ich print (coreDataStack) aufruft. Ich weiß also, dass es auf den ersten Blick existiert. Die Schaltfläche, die ich drücke, um zur Kontaktseite zu gelangen, ist eine Balkenschaltfläche in einer Symbolleiste.
Mögliches Problem 1 kann sein, dass ich nicht mit der Navigationsleiste hin und her gehe, aber alle Ansichten sind in einen Navigationsstapel eingebettet.
Muss ich forSegue innerhalb des ersten View-Controllers vorbereiten, um den NSManagedObjectContext zu übergeben?
Zwischen den Kontakten und dem neuen Contact View-Controller befindet sich auch ein Navigationscontroller. Aber das Nil scheint zurückgeschickt zu werden, bevor das überhaupt geschieht. In den Kontakten View-Controller die prepareForSegue, dass der Benutzer überprüft, ob versucht, einen Kontakt hinzuzufügen hier gefunden wird
else if segue.identifier == "AddContact" {
let navigationController = segue.destinationViewController as! UINavigationController
let addViewController = navigationController.topViewController as! NewContactViewController
let contactEntity = NSEntityDescription.entityForName("Contact", inManagedObjectContext: coreDataStack.context)
let newContact = Contact(entity: contactEntity!, insertIntoManagedObjectContext: coreDataStack.context)
addViewController.contact = newContact
addViewController.context = newContact.managedObjectContext
addViewController.delegate = self
}
Und die Fehler, die ich bekommen habe ist, dass die coreDataStack.context wenn ich versuche, und erstellen Sie einen neuen Kontakt Nil zurückgeben. Ich habe stundenlang damit herumgetobt und ich glaube, ich vermisse etwas wirklich Kleines oder Großes. So oder so möchte ich einfach Core Data lernen und besser werden.
Also einfach den Navigationscontroller holen und dann den Zielcontroller holen? Ist es einfach eine Frage von destinationcontroller.context = self.context in der Prepareforsegue für den ersten View-Controller? – ggworean
Antwort aktualisiert, um zu demonstrieren, was ich meine. –
Oh, so ist diese prepareforsegue in der zweiten Ansicht Controller, wo es eine Art von Prepareforsegue empfangenden Art ist. Super, danke – ggworean