私はいくつかのチュートリアルを始めるコアデータを初めて使い、10のスコアがAppDelegateから保存され、コンソールから取り出して印刷することができます)。致命的なエラーを防ぐ方法:予期せぬことにnil wileアンラッピングオプション値
その後、別のVCでfetchrequestを使用して正常に保存されたデータを取得すると、次のエラーが表示されます。 致命的なエラー:オプションの値をアンラッピングしている間に予期せずnilが見つかりました。 はここにデータを取得するためのコードです:
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.
}
}
私が使用しているので...私は「エラーフェッチデータ」を取得するべきではありませんしましょうか?致命的なエラーを取得する代わりに?アプリケーションをロードするときにデータを取得することはできますが、同じコードを使用して別のVCでデータを取得しようとした場合はどうしたらいいですか?オプションの値アンラップながら
私は致命的なエラーに関連する他の質問を見てきましたがnilが見つかりました What does "fatal error: unexpectedly found nil while unwrapping an Optional value" mean?
fatal error: unexpectedly found nil while unwrapping an Optional value をし、私が基本的に存在しないものを取得しようとしているようですが、データは実際に保存され、アプリを起動するときにコンソールでそのデータを取得できます。同じフェッチリクエストを使用すると、アプリを読み込んでデータを取得しても同じ結果が得られると予想されますが、そうではありません。
私はここで何が欠けていますか?それは非常に基本的でなければならないように感じますが、何らかの理由で2日間試してもうまく動作しません。
アプリのデータを保存し、検索するためのデリゲートコード:
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()
}
}
任意の助けいただければ幸いです!
@ vadianありがとう! – ThirtyKnots