我无法用自己来解决这个问题。我正在检索存储在Core Data中的一些设置,并将这些设置打印到一些UITextFields。这在同一个项目中的另一个VC中运行良好,但在这里我得到了#34;在解开可选值"时,意外地发现了nil。
我是XCode我可以看到值存在吗?为什么我会这次崩溃? 请参阅随附的屏幕截图。
这是我现在的代码。 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 :(得分:0)
Player1
可以是 nil 。您正在尝试 强制向下转发 它到一个值,但它在swift中是一个致命的错误。使用if let
语句测试值:
if let playerOne = getDMSSettings.value(forKey: "playerOne") as? String {
print(playerOne)
txtPlayerOne.text = playerOne
}
详细了解文档中的类型转换:
答案 1 :(得分:0)
您还可以使用guard语句来解包您的可选变量。仅当您确信变量具有非可选值时,最好使用强制解包。
do {
guard let playerOne = getDMSettings.value(forKey:"playerOne") else {
return
}
print(playerOne)
txtPlayerOne.text = playerOne
}