应用启动时,我需要检查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)
}
}
}
上传膳食应在获取所有内容(可能不是最佳功能名称)后将其上传至屏幕。 这就是我在didFinishLaunchingWithOptions中的AppDelegate中写的:
DataManager.manager.uploadReports()
我在getMealsFromCoreData中得到一个紫色警告,说appDelegate应该在主队列上运行。 我真的对这种CoreData +将CoreData从主线程移到后台感到困惑。
真的会让您的帮助专家感到高兴。 难道我做错了什么?最佳做法是什么?
答案 0 :(得分:0)
好吧,警告提示您在做什么错。
最佳实践取决于用例。但这当然不是在应用程序启动时获取所有数据。在需要时获取数据,并根据需要显示(显示)尽可能多的数据。 如果可以的话,也许可以使用NSFetchedResultsController来维护视图的数据。