2016-11-11 7 views
1

Wie kann ich eine Zählanfrage im Hintergrund ausführen? Der folgende Code blockiert meine Benutzeroberfläche stark. Ich habe versucht, NSAsynchronousFetchRequest zu implementieren, aber ich konnte es nicht zusammensetzen. Jede Hilfe würde sehr geschätzt werden!Wie führe ich einen Count-Abruf im Hintergrund durch?

 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

versuchen, einen privaten Warteschlange Kontext chil des persistenten Speichers zu erstellen. Verwenden Sie nicht als Kontext den Hauptkontext oder ein Kind des Hauptkontextes – ELKA

Antwort

0

Verwenden PrivateQueueConcurrencyType zu lokalem verwalteten Objekt und verwenden countForFetchRequest Methode statt holen:

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) 
Verwandte Themen