在应用程序启动时从Core Data中获取数据

时间:2019-07-13 16:12:21

标签: swift core-data

应用启动时,我需要检查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从主线程移到后台感到困惑。

真的会让您的帮助专家感到高兴。 难道我做错了什么?最佳做法是什么?

1 个答案:

答案 0 :(得分:0)

好吧,警告提示您在做什么错。

最佳实践取决于用例。但这当然不是在应用程序启动时获取所有数据。在需要时获取数据,并根据需要显示(显示)尽可能多的数据。 如果可以的话,也许可以使用NSFetchedResultsController来维护视图的数据。