2016-03-28 43 views
0

我试图从CoreData中提取多个实体。我已经在viewDidAppear函数中试过了。但是,由于数据是一个庞大的数据,从服务器的远程JSON中保存,所以获取它似乎需要时间。我甚至跟着这tutorial。 但是获取大量数据似乎有点慢。有没有更好的方法。现在从CoreData中提取多个实体

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

我怀疑你可以让它更快,但是这种长时间运行的操作不应该在主线程上运行。

相反,你应该遵循这个模式做取在后台线程,一旦它完成更新影响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 
    } 
} 
+0

我最近买了运行在后台方法的取得和主刷新UI回来的想法线。我在尝试运行'viewWillAppear()'方法中的抓取时犯了一个错误,该方法应该在'viewDidLoad()_'方法上运行,就像我的情况一样。无论如何,谢谢你的回答! @Wujo – amagain