2016-07-15 21 views
0

Ich habe eine Suche durchgeführt und für jedes neue Zeichen, das vom Benutzer eingegeben wurde, wird performFetch: innerhalb einer performBlock: gestartet. Wenn sich der Suchstring ändert, möchte ich den vorherigen gestarteten Block abbrechen und neu beginnen. Wie würde ich den Block innerhalb der performBlock: darüber abbrechen oder zumindest informieren?So brechen Sie performBlock ab:

Beispiel Code, den ich jetzt haben:

[myManagedObjectContext performBlock:^{ 
     // fetch from background queue 
     if([[self fetchedResultsController] performFetch:nil]) { 
      // update the view from the main queue 
      // don't do this if performBlock already got started again! but how? 
      [[NSOperationQueue mainQueue] addOperationWithBlock:^{ 
       // refresh UI 
      }]; 
     } 
    }]; 

Antwort

2

Es gibt keine API einen performBlock abzubrechen. Sobald es beginnt, wird es fortgesetzt, bis es abgeschlossen ist oder bis Ihr Code return s davon ist.

Wenn Sie Fetches während der Bearbeitung abbrechen müssen, sehen Sie in NSAsynchronousFetchRequest nach, wodurch die Stornierung über NSProgress möglich ist. Asynchrone Abrufanforderungen und Aufhebung sind in der WWDC 2014 Core Data session

+0

beschrieben Dank für diese klare und einfache Antwort. 'NSAsynchronousFetchRequest' sieht wie eine gute Lösung aus –