当应用程序启动时,我需要检查Core Data中的项目。这就是我到目前为止所写的,但我不认为这是最佳实践(尽管它似乎是有效的),还有其他方法吗?有更好的方法满足我的需求吗?
func getMealsFromCoreData() -> [Meal]{
var retrivedMeals = [Meal]()
let appDelegate = UIApplication.shared.delegate as? AppDelegate
let managedContext = appDelegate?.persistentContainer.viewContext
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Meal")
do {
let result = try managedContext?.fetch(fetchRequest)
for data in result as! [NSManagedObject]{
retrivedMeals.append(data as! Meal)
}
}catch{
print("Failed to fetch.")
}
return retrivedMeals
}
func uploadMeals(){
var mealsToUpload = [Meal]()
let dispatchQueue = DispatchQueue(label: "mealQueue", qos: .background)
dispatchQueue.async {
mealsToUpload = self.getMealsFromCoreData()
for meal in mealsToUpload {
print(meal)
}
}
}Upload meal应该在获取所有东西(可能不是最好的函数名)后上传到屏幕上。这是我在didFinishLaunchingWithOptions的AppDelegate中写的:
DataManager.manager.uploadReports()我在getMealsFromCoreData中得到一个紫色警告,告诉我appDelegate应该在主队列上运行。我真的对这种CoreData +将CoreData从主线程移到后台的做法感到困惑。
会非常感谢你的帮手们。我做错了什么吗?这方面的最佳实践是什么?
发布于 2019-07-15 21:19:49
好的,警告会告诉你做错了什么。
最佳实践取决于用例。但它肯定不会在应用程序启动时获取所有数据。在需要的时候获取数据,需要多少数据就取多少数据(以显示)。如果您愿意的话,也许可以使用NSFetchedResultsController来维护视图的数据。
https://stackoverflow.com/questions/57020815
复制相似问题