如何取消performBlock:

时间:2016-07-15 20:21:06

标签: ios core-data nsmanagedobjectcontext nsoperationqueue

我实施了搜索,并且对于用户键入的每个新字符,performFetch:内部都会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
            }];
        }
    }];

1 个答案:

答案 0 :(得分:3)

没有API可以取消performBlock。一旦启动,它将一直持续到完成或直到您的代码return为止。

如果您发现有必要在取消时取消抓取,请查看NSAsynchronousFetchRequest,这样可以通过NSProgress取消。 WWDC 2014 Core Data session

中描述了异步获取请求和取消