2016-04-07 39 views
0

我正在使用Restkit(0.20.3),编译到iPhone 5s(8.4)模拟器上。已运行请求/映射的Restkit“cancelAllObjectRequestOperationsWithMethod”

所以我见过很多关于“cancelAllObjectRequestOperationsWithMethod”的帖子以取消请求。我目前有一个带有大型JSON包的请求,需要几秒钟才能映射到CoreData。用户可以选择通过按钮手动取消请求。

如果我的理解是正确的,这个“cancelAllObjectRequestOperationsWithMethod”应该停止请求,即使它正在运行?如果没有,那么我的问题是如何去做这件事。但是,如果这应该停止当前的操作,那么基于日志,它似乎没有工作,因为我仍然可以看到许多用于映射API的打印语句。

这里是我的开始API代码:

@try{ 
     [[RKObjectManager sharedManager] getObjectsAtPath:path 
               parameters:nil 
                success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {}              failure:^(RKObjectRequestOperation *operation, NSError *error) {} 
@catch(NSException *e) { 
    NSLog(@"%@", e); 
} 

这里是我的取消代码,当用户按下按钮:

NSLog(@"%@", [[RKObjectManager sharedManager] enqueuedObjectRequestOperationsWithMethod:RKRequestMethodAny matchingPathPattern:path]); 
[[RKObjectManager sharedManager] cancelAllObjectRequestOperationsWithMethod:RKRequestMethodAny matchingPathPattern:path]; 
NSLog(@"%@", [[RKObjectManager sharedManager] enqueuedObjectRequestOperationsWithMethod:RKRequestMethodAny matchingPathPattern:path]); 

第一的NSLog显示state: Executing, isCancelled=NO

第二NSLog显示state: Executing, isCancelled=YES

S o我已经成功取消取消,但映射仍会继续显示在我的日志中。当时是否有可能停止执行执行

回答

0

它会停止,但不会立即。日志还需要时间来打印,并且来自多个不同的线程,因此您无法100%依赖某些项目的顺序。

当您取消某个操作时,您只需设置一个标志,则需要检查该标志并停止操作。每个操作都会根据他们所做的工作以及他们的工作方式选择不同的时间(或一组时间)。因此,无论内部取消任何操作都会完成,然后稍后停止。

其中一个关键的问题是未来取消的操作甚至不会启动,当前取消的操作不会调用完成处理程序。