我试了很多周才解决这个问题。
我的数据在另一个视图出现之前尚未就绪。
这是我的代码
FirstViewController.swift
let moc = DatabaseController.getContext()
moc.performAndWait {
let fetchRequest:NSFetchRequest<Pet> = Pet.fetchRequest()
fetchRequest.returnsObjectsAsFaults = true
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "order", ascending: false,selector: #selector(NSString.localizedStandardCompare(_:)))]
self.petObj= try! fetchRequest.execute()
}
let VC = self.storyboard!.instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController
VC.petObj = self.petObj
let navController = UINavigationController(rootViewController: VC)
navController.navigationBar.isHidden = true
self.present(navController, animated:true, completion: nil)
上面的结果你会看到错误和正确的输出
我通过添加
解决了这个问题sleep(1)
在performAndWait结束之前,但我知道这不是处理这个问题的正确方法。
所以我的调查是获取数据尚未就绪。
答案 0 :(得分:0)
使用fetchedResultsController。 fetchedResultsController执行提取,然后监视核心数据以进行任何更改(更新,删除,插入,移动)以告知UI更新。一般来说,我喜欢总是使用fetchedResultsController,而不是只做一个提取。以下是一些原因:
fetchedObjects
属性始终可以安全访问但是有一些问题需要注意:
students
中的所有ANY class.special == 1
,如果类对象更新,它将不会更新,因为它只查看学生对象希望有所帮助