2016-03-28 59 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