2016-03-28 13 views
0

Ich versuche, mehrere Entitäten von CoreData zu holen. Ich habe es in ViewDidAppear Funktion versucht. Da es sich bei den Daten jedoch um eine große Menge handelt, die von Remote-JSON auf dem Server gespeichert wird, scheint das Abrufen Zeit zu beanspruchen. Ich folgte sogar dieser tutorial. Aber eine große Datenmenge zu holen scheint ein wenig langsam zu sein. Gibt es einen besseren Ansatz?Holen mehrerer Entitäten von 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() 
} 

Nun meine Frage ist, was ist der beste Ansatz Einheiten von Coredata zu holen, so dass der Abrufprozess glatt geht und dass keine Auswirkungen auf die Anwendungsleistung. Dieses Code-Snippet funktioniert perfekt zum Abrufen, aber ich möchte es schneller machen.

Antwort

1

Ich bezweifle, dass Sie es schneller machen können, aber solche lang laufenden Operationen sollten nicht auf Haupt-Thread ausgeführt werden.

Stattdessen sollten Sie folgen diesem Muster auf Hintergrund-Thread zu tun holen und sobald es fertig Update betroffen 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

Ich erhielt vor kurzem die Idee, den Abruf im Hintergrund Methode ausgeführt wird und die Aktualisierung der Benutzeroberfläche wieder im Haupt Faden. Ich habe auch einen Fehler gemacht, als ich versucht habe, das Abrufen in der Methode 'viewWillAppear()' auszuführen, die auf die Methode 'viewDidLoad() _ 'wie in meinem Fall ausgeführt werden sollte. Wie auch immer, danke für deine Antwort! @Wujo – amagain