2016-11-11 13 views
1

バックグラウンドでカウント要求を実行するには、以下のコードでUIが大きくブロックされています。 NSAsynchronousFetchRequestを実装しようとしましたが、それをまとめることができませんでした。どんな助けでも大歓迎です!バックグラウンドでカウント取得要求を実行する方法

 let NewMessage: NSFetchRequest<Mesages> = Mesages.fetchRequest() 

     NewMessage.predicate = NSPredicate(format: "timestamp = %@", date) 

     do { 
      //context.fetch blocking the main thread 
      let checkMessages = try context.fetch(NewMessage) 
      if checkMessages.count == 0 { 

      print('no duplicates') 

      } 
     } catch { 
     } 
+0

は、永続ストアの専用キューのコンテキストCHILを作成してみてください。コンテキストとしてメインコンテキストまたはメインコンテキストの子を使用しないでください – ELKA

答えて

0

使用PrivateQueueConcurrencyTypeローカルの管理対象オブジェクトにし、代わりにフェッチのcountForFetchRequestメソッドを使用します。

let context: NSManagedObjectContext = NSManagedObjectContext.init(concurrencyType: .PrivateQueueConcurrencyType) 
// set context with parent child hierarchy. 
let NewMessage: NSFetchRequest = NSFetchRequest.init(entityName: "Message") 
var error:NSError? ; 

let messagesCount = context.countForFetchRequest(NewMessage, error:&error) 
print(messagesCount) 
関連する問題