2016-10-08 9 views
-1

私は自分自身でこれを理解することができません。私はコアデータに格納されているいくつかの設定を取得しており、これらの設定をいくつかのUITextFieldに出力します。これは同じプロジェクトの別のVCでうまく動作しますが、ここではオプション値をアンラッピングしている間に "予期せぬことにnilが見つかりました"ということになります。Swift 3.0 - Core Data/Unexpected found nil

I XCode値があることがわかりますか?なぜ私はこのクラッシュを受けるのですか? 添付のスクリーンショットをご覧ください。

enter image description here

これは私が今までしています現在のコードです。 XCodeの

func getSettingsFromCoreData() { 
    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 
    let request = NSFetchRequest<NSFetchRequestResult>(entityName: "DeathMatchSettings") 
    do{ 
     let results = try context.fetch(request) 
     let managedObject = results as! [NSManagedObject] 
     let getDMSettings = managedObject[0] 

     guard let playerOne = getDMSettings.value(forKey: "playerOne") else { 
      return 
     } 
     print(playerOne) 
     txtPlayerOne.text = String(describing: playerOne) 

    }catch{ 
     fatalError("Error in retreiving settings from CoreData") 
    } 
} 

答えて

0
Player1

でも同じエラーメッセージがゼロすることができます。 強制ダウンキャストにしようとしていますが、速やかに致命的なエラーです。値をテストするためにif letステートメントを使用します。

if let playerOne = getDMSSettings.value(forKey: "playerOne") as? String { 
    print(playerOne) 
    txtPlayerOne.text = playerOne 
} 

がドキュメントに タイプキャストについて詳しく読む:

https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/TypeCasting.html

+0

ありがとうございました!しかし、私はまだ問題を解決することができません。私は上記のコードに従って変更しました。私はなぜこの値がゼロであるのか理解できません。それではいけませんか?そして値はコンソールにうまく表示されます。 – Frank

+0

オプション値についてはいくつかのドキュメントをお読みください。これはSwiftの機能番号1です。あなたの値がゼロであることを自動的には意味しません。それはゼロかもしれません。だからこそ、あなたの目的に合わせて操作するためには、オプションの値をアンラップする必要があります。 – pedrouan

+0

私はたくさんの読書をしましたが、それでも私はこれを理解することができません。奇妙な部分は、まったく同じコードが別のVCで正常に動作していることです。 – Frank

0

また、あなたのオプションの変数をアンラップするためにガード文を使用することができます。変数に非オプション値があることを確信している場合にのみ、強制アンラッピングを使用する方が良いでしょう。

do { 

    guard let playerOne = getDMSettings.value(forKey:"playerOne") else { 
     return 
    } 

    print(playerOne) 
    txtPlayerOne.text = playerOne 
} 
+0

ありがとう!これもやはり同じ問題です。変数はコンソールにはうまく印刷されますが、 "txtPlayerOne"で使用しようとすると、 "オプション値をアンラッピングしている間に予期せず見つからない"というエラーが発生します。 – Frank

+0

上記のコードを更新できますか?ガードステートメントを使用し、playerOneがオプションの値を保持している場合、値を出力する前に関数を終了する必要があります。 – woogii

+0

メインポストでコードが更新されました – Frank