在代码之前 - 用于传入新数据 ...
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上用于获取数据。只有当我试图提示他们时我才会有错误。
答案 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打开可选项,而不检查是否有任何要打开的东西。因此,导致崩溃的最可能原因是birthDate
或lastModified
为零,或两者兼而有之。
也可能是您在代码中隐式解包了无效的选项。例如,如果self.birthField
或self.modified
为nil,则在尝试使用它们时代码会崩溃。
这看起来不像是核心数据问题,看起来像是一个Swift问题。