首先感谢您提供的任何帮助,谢谢您的时间:)
我没有任何错误或问题,但是使用 Core Data&Swift 4 获取数据时,我的控制台正在打印nil。
这是我的代码:
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let context = appDelegate.persistentContainer.viewContext
//Fetch from Core Data
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users")
//request.predicate = NSPredicate(format: "age = %@", "12")
request.returnsObjectsAsFaults = false
do {
let result = try context.fetch(request)
for data in result as! [NSManagedObject] {
print(data.value(forKey: "username") as Any) // ou as? String
print(data.value(forKey: "date_naissance") as Any) // ou as? String
}
} catch {
print("Failed")
}
这是我的控制台输出:
可选(julien)可选(1994-09-09 04:34:00 +0000)无无
如果仅获取一个值,则控制台仅显示nil。 打印的每个值都为零。
此外,我之前的代码是
print(data.value(forKey: "username") as! String)
但是在控制台中打印该值后,它崩溃了(尽管该值被打印了)。
所以我通过打印为Any来修复它,但是现在我得到了零。
我只想知道这是否正常,因为它暂时不影响我的应用程序,但可能很快就会出现。
感谢您的时间,帮助和支持:)
祝您有美好的一天! 朱利安
答案 0 :(得分:0)
尝试通过循环将代码更改为此
do {
let result = try context.fetch(request)
for data in result as! [NSManagedObject] {
if let userName = data.value(forKey: "username") as? String {
print(userName)
}
if let dateNaissance = data.value(forKey: "date_naissance") as? String {
print(dateNaissance)
}
}
} catch {
print("Failed")
}
选中documentation可选
答案 1 :(得分:0)
非常感谢你们的帮助。
我做了对我来说似乎更合乎逻辑的事情(即使我应该编写更好的代码,这也是事实)。
谢谢vamanandασίληςΔ(还有wvteijlingen编辑我的帖子)。 :)
因此,马丁得到了答案,我将其张贴在此处,以将其标记为已解决,谢谢马丁。我从CoreData模型中删除了“可选”,现在不再打印那些nil值了,所以很酷:)
祝您有美好的一天,非常感谢! :)