Ich habe diesen Code, um verschiedene Tabellen zu durchsuchen, mein Problem ist, dass ich nicht mit der Benutzeroberfläche interagieren kann, bis die Las Fetch-Anfrage ausgeführt wird. Wenn ich nach einem bestimmten Wert suche und das Ergebnis in "Table2" ist, wird das TableView zwar aktualisiert, kann aber erst dann mit ihm interagieren, wenn die letzte Tabelle durchsucht wurde. Die Ausführung von func loadData() dauert nur wenige Millisekunden, um ausgeführt und beendet zu werden, und die Abrufe werden in einem anderen Thread ausgeführt. Ich weiß nicht, was mit diesem Code, Hilfe oder Rat falsch ist? Die Gesamtanzahl der Datensätze in allen Tabellen beträgt ca. 5 Millionen. Es dauert einige Zeit, alle zu durchsuchen, deshalb möchte ich den Benutzer nicht warten lassen, wenn einige Ergebnisse verfügbar sind, bevor die Suche beendet wird.UI hängt, bis alle Abrufe fertig sind
func loadData() {
let tablas = ["Table1", "Table2", "Table3", "Table4", "Table5", "Table6", "Table7", "Table8", "Table9", "Table10", "Table11"]
let managedContext = NSManagedObjectContext(concurrencyType: .PrivateQueueConcurrencyType)
managedContext.parentContext = self.moc
for tbl in tablas {
managedContext.performBlock {
let fetchRequest = NSFetchRequest(entityName: tbl)
let predicate = NSPredicate(format: "name CONTAINS %@", self.filter)
fetchRequest.predicate = predicate
fetchRequest.resultType = NSFetchRequestResultType.ManagedObjectIDResultType
fetchRequest.fetchLimit = 50
fetchRequest.fetchBatchSize = 10
do {
let results = try managedContext.executeFetchRequest(fetchRequest) as! [NSManagedObjectID]
if results.count != 0 {
self.resultArray.appendContentsOf(results)
dispatch_async(dispatch_get_main_queue()) {
self.tableView.reloadData()
}
}
} catch let error as NSError {
dispatch_async(dispatch_get_main_queue()) {
let errorAlert = UIAlertController(title: "Error!!!", message: error.localizedDescription, preferredStyle: .Alert)
errorAlert.addAction(UIAlertAction(title: "OK", style: .Cancel, handler: nil))
self.presentViewController(errorAlert, animated: true, completion: nil)
}
}
}
}
}
Warum Sie zuerst 5-10 Inhalt und implementieren ziehen zu aktualisieren und fügen 5-10 neue Datensätze nicht geladen werden. – gurmandeep
Die meisten Suchen werden weniger als 10 Ergebnisse haben, ich möchte den Benutzer nicht bitten, zu aktualisieren und warten, um 2 oder wahrscheinlich 0 Datensätze zu laden. verwenden – cubick84
Dann dispatch_async (dispatch_get_main_queue() { }) – gurmandeep