我正在尝试从CoreData获取多个实体。我在viewDidAppear函数中尝试过它。但是,由于数据量巨大,从服务器中的远程JSON中保存,因此获取它似乎需要时间。我甚至遵循了tutorial。 但是获取大量数据似乎有点慢。有没有更好的方法。
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
let context: NSManagedObjectContext? = (UIApplication.sharedApplication().delegate as? AppDelegate)?.managedObjectContext!
let TPTodayFetchRequest = NSFetchRequest(entityName: Constants.CoreDataEntities.TPTodayCoreDataEntity)
let mahinaSort = NSSortDescriptor(key: "month_np_id", ascending: true)
TPTodayFetchRequest.sortDescriptors = [mahinaSort]
let error: NSError? = nil
do {
let patroDailyResults = try context!.executeFetchRequest(TPTodayFetchRequest) as? [TPToday]
if let results = patroDailyResults
{
patroDaily = results
}
else
{
print("Couldn't fetch \(error), \(error!.userInfo)")
}
}
catch {
print("error")
}
self.refreshUI()
}
现在我的问题是,从CoreData获取实体的最佳方法是什么,以便获取过程顺利进行并且不会影响应用程序性能。这段代码完全适用于抓取,但我想让它更快。
答案 0 :(得分:1)
我怀疑你能否加快速度,但是这些长时间运行的操作不应该在主线程上运行。
相反,您应该按照此模式在后台线程上进行提取,并且一旦完成更新受影响的UI:
let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
dispatch_async(dispatch_get_global_queue(priority, 0)) {
// fetch data
dispatch_async(dispatch_get_main_queue()) {
// update some UI
}
}