如何取消performBlock:
问题描述:
我实现了一个搜索和由用户输入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
}];
}
}];
答
没有API取消performBlock
。一旦开始,它继续进行,直到它从它完成,或直到你的代码return
秒。
如果您发现有必要取消提取,请查看NSAsynchronousFetchRequest
,它允许通过NSProgress
取消。异步提取请求和取消在WWDC 2014 Core Data session
感谢这个简单明了的答案描述。 'NSAsynchronousFetchRequest'看起来像一个很好的解决方案 –