CoreData有效,但在控制台中又返回了一个nil对象?

时间:2019-01-30 08:40:45

标签: ios swift core-data

首先感谢您提供的任何帮助,谢谢您的时间:)

我没有任何错误或问题,但是使用 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来修复它,但是现在我得到了零。

我只想知道这是否正常,因为它暂时不影响我的应用程序,但可能很快就会出现。

感谢您的时间,帮助和支持:)

祝您有美好的一天! 朱利安

2 个答案:

答案 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值了,所以很酷:)

祝您有美好的一天,非常感谢! :)