So bin ich neu zu Kerndaten, beginnend mit einigen Tutorials und bekam eine sehr einfache Einrichtung, wo eine 10 Punkte von der AppDelegate gespeichert werden und das funktioniert gut (kann von der Konsole abrufen und drucken).Wie fatalen Fehler zu verhindern: unerwartet gefunden nil wile Unwrapping ein optionaler Wert
Wenn ich eine fetchrequest in einer anderen VC verwenden möchte, um die erfolgreich gespeicherten Daten abzurufen, erhalte ich den folgenden Fehler: Schwerwiegender Fehler: unerwartet gefunden Null beim Entpacken eines optionalen Werts. Hier ist der Code, um die Daten abzurufen:
import Foundation
import CoreData
import UIKit
class testVC: UIViewController {
var managedObjectContext: NSManagedObjectContext!
var scores = [Scores]()
@IBOutlet weak var retrieveDataLabel: UIButton!
@IBOutlet weak var saveLabel: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func retrieveData(sender: AnyObject) {
let fetchRequest = NSFetchRequest(entityName: "Scores")
do {
if let results = try managedObjectContext.executeFetchRequest(fetchRequest) as? [Scores]{
scores = results
for result in results {
if let gameScore = result.valueForKey("gameScore") as? Int{
print("Your score is \(gameScore)")
}
}
}
}catch{
print("Error fetching data")
}}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
Da ich verwende, wenn lassen .. soll ich werden nicht immer „Error Abrufen von Daten“? anstatt den fatalen Fehler zu bekommen? Wie kann ich die Daten beim Laden der App abrufen, aber nicht, wenn ich versuche, die Daten in einer anderen VC mit demselben Code abzurufen?
Ich habe bei anderen Fragen sehe zu fatalen Fehlern im Zusammenhang gefunden, während nil einen optionalen Wert auspackt: What does "fatal error: unexpectedly found nil while unwrapping an Optional value" mean?
fatal error: unexpectedly found nil while unwrapping an Optional value und es scheint, dass ich im Grunde bin versucht, etwas zu holen, die nicht da ist, aber Die Daten werden in der Tat gespeichert und ich kann sie in der Konsole abrufen, wenn ich die App starte. Mit der gleichen Abrufanforderung würde ich erwarten, identische Ergebnisse zu erhalten, wenn ich die App lade und die Daten abrufe, aber das ist nicht der Fall.
Was fehlt mir hier? Es fühlt sich an, als sollte es sehr einfach sein, aber aus irgendeinem Grund kann es einfach nicht funktionieren, nachdem ich es 2 Tage lang versucht habe.
AppDelegate Code zu speichern und Abrufen von Daten:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
//addTestData()
let fetchRequest = NSFetchRequest(entityName: "Scores")
do {
if let results = try managedObjectContext.executeFetchRequest(fetchRequest) as? [NSManagedObject]{
for result in results {
if let gameScore = result.valueForKey("gameScore") as? Int{
print("Your score is \(gameScore)")
}
}
}
}catch{
print("Error fetching data")
}
return true
}
func addTestData(){
guard let entity = NSEntityDescription.entityForName("Scores", inManagedObjectContext: managedObjectContext) else{
fatalError("Could not find entity description")
}
for i in 1...10{
let score = Scores(entity: entity, insertIntoManagedObjectContext: managedObjectContext)
score.gameScore = i
}
do {
try managedObjectContext.save()
} catch {
// Replace this implementation with code to handle the error appropriately.
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
let nserror = error as NSError
NSLog("Unresolved error \(nserror), \(nserror.userInfo)")
abort()
}
}
Jede Hilfe wäre sehr dankbar!
@ vadian Danke! – ThirtyKnots