Swift 3.0 - 核心数据/意外发现没有

时间:2016-10-08 11:52:16

标签: swift core-data swift3

我无法用自己来解决这个问题。我正在检索存储在Core Data中的一些设置,并将这些设置打印到一些UITextFields。这在同一个项目中的另一个VC中运行良好,但在这里我得到了#34;在解开可选值"时,意外地发现了nil。

我是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")
    }
}

2 个答案:

答案 0 :(得分:0)

Player1可以是 nil 。您正在尝试 强制向下转发 它到一个值,但它在swift中是一个致命的错误。使用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

答案 1 :(得分:0)

您还可以使用guard语句来解包您的可选变量。仅当您确信变量具有非可选值时,最好使用强制解包。

do {

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

   print(playerOne)
   txtPlayerOne.text = playerOne
}