2016-11-11 29 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

嘗試創建持久性存儲的專用隊列上下文柒。不要將主要背景或主要背景的孩子用作背景 – 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)