2016-03-28 16 views
0

Birden çok varışı CoreData'dan almaya çalışıyorum. ViewDidAppear işlevinde denedim. Ancak, veriler sunucuda uzak JSON'dan kaydedilen devasa bir toplu olduğundan, alma işlemi zaman alıyor gibi görünüyor. Bu tutorial'u bile takip ettim. Ancak büyük bir veri almak biraz yavaş görünüyor. Daha iyi bir yaklaşım var mı?CoreData'den birden fazla varlık alınıyor

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() 
} 

Şimdi benim sorum, alımlı süreç pürüzsüz gider ve bu uygulama performansını etkilemez böylece CoreData gelen varlıkları almak için en iyi yaklaşım nedir edilir. Bu kod snippet'i almak için mükemmel bir şekilde çalışıyor, ancak daha hızlı yapmak istiyorum.

cevap

1

Uzun süren işlemlerin ana iş parçacığı üzerinde çalıştırılmamasına rağmen, daha hızlı yapabileceğinizden şüpheliyim.

Bunun yerine arka plan iş parçacığı üzerinde getirme yapmak için bu yolu takip ederler ve Tamamlandığında kez güncelleme etkilenen UI olmalıdır: Geçenlerde arkaplan yönteminde getiriliyor çalışan ve ana geri UI ferahlatıcı fikrini aldık

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

iplik. Ayrıca benim durumumdaki gibi viewDidLoad() _ 'yönteminde çalışması gereken" viewWillAppear() "yönteminde getirmeyi çalıştırmaya çalışırken bir hata yaptım. Her neyse, cevabın için teşekkürler! @Wujo – amagain

İlgili konular