2016-03-28 13 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すべきである:私は最近、バックグラウンドの方法でフェッチを実行し、メインに戻って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

糸。私は 'viewWillAppear()'メソッドでフェッチを実行しようとした際に間違いを犯しました。これは、私の場合のように 'viewDidLoad()_'メソッドで実行されていたはずです。とにかく、あなたの答えをありがとう! @Wujo – amagain

関連する問題