从CoreData获取多个实体

时间:2016-03-28 05:38:06

标签: ios swift nsfetchrequest

我正在尝试从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获取实体的最佳方法是什么,以便获取过程顺利进行并且不会影响应用程序性能。这段代码完全适用于抓取,但我想让它更快。

1 个答案:

答案 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
    }
}