尝试从Core Data加载时,在swift中发现nil

时间:2018-01-08 00:08:59

标签: swift core-data

enter image description here

在代码之前 - 用于传入新数据 ...

else
{
    DispatchQueue.main.async
    {
            let fetchRequest:NSFetchRequest<Identity> = Identity.fetchRequest()
            do {
                self.identities = try DatabaseController.getContext().fetch(fetchRequest)
                for identity in self.identities as [Identity]
                {
                    if identity.id == self.transferedId
                    {
                    //name
                    self.navigationController?.navigationBar.topItem?.title = identity.pName
                    self.nameField.text = identity.pName

                    //birth
                    let dateFormatter = DateFormatter()
                    dateFormatter.dateFormat = "dd-MM-yyyy"
                    var dateString = dateFormatter.string(from:identity.birthDate! as Date)
                    self.birthField.text = dateString

                    //modified
                    dateString = dateFormatter.string(from:identity.lastModified! as Date)
                    self.modified.text = "Modified on "+dateString
                    }
                }
            }
            catch
            {
                print("Error fetchRequest in ViewWillApper: \(error)")
            }
    }

}

... 它不会加载窗口有错误。 问题是 - 当我尝试加载此ViewDidAppear时...没有错误。但是,这个代码分别在之前的VIEW上用于获取数据。只有当我试图提示他们时我才会有错误。

2 个答案:

答案 0 :(得分:0)

如果您的上下文是在主线程中创建的,则无法在后台使用,反之亦然

答案 1 :(得分:0)

由于您没有说出导致崩溃的代码行,因此无法确定。然而,#34;在解开一个可选的&#34;时意外地发现了零。有一些共同的原因。最可能的原因是这两行之一:

var dateString = dateFormatter.string(from:identity.birthDate! as Date)
....
dateString = dateFormatter.string(from:identity.lastModified! as Date)

任何时候你在Swift中使用这样的!,你就会说,如果这个值是nil,那么就把应用程序崩溃了。您告诉Swift打开可选项,而不检查是否有任何要打开的东西。因此,导致崩溃的最可能原因是birthDatelastModified为零,或两者兼而有之。

也可能是您在代码中隐式解包了无效的选项。例如,如果self.birthFieldself.modified为nil,则在尝试使用它们时代码会崩溃。

这看起来不像是核心数据问题,看起来像是一个Swift问题。