2016-07-15 26 views
0

我实现了一个搜索和由用户输入performFetch:每一个新的角色是开始performBlock:内。如果搜索字符串发生变化,我想取消上一个启动的程序段并重新开始。我怎么会取消或者至少告知块performBlock:它里面?如何取消performBlock:

示例代码我现在所拥有的:

[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 
      }]; 
     } 
    }]; 

回答

2

没有API取消performBlock。一旦开始,它继续进行,直到它从它完成,或直到你的代码return秒。

如果您发现有必要取消提取,请查看NSAsynchronousFetchRequest,它允许通过NSProgress取消。异步提取请求和取消在WWDC 2014 Core Data session

+0

感谢这个简单明了的答案描述。 'NSAsynchronousFetchRequest'看起来像一个很好的解决方案 –