AFNet工作故障块



我正在使用Afnetworking 2.0来显示YouTube视频。当我遇到连接错误时,我打开一个警报视图,如果我单击"确定",我想停止请求。

警报视图显示正确,但是当我单击"确定"时,请求不会停止,并且我看到活动指示器。

如何停止请求?

这是下面的代码:

-(void)loadData {
NSString *urlAsString = @"https://gdata.youtube.com/feeds/api/videos?q=wankel&v=2&max-results=50&alt=jsonc";
UIActivityIndicatorView *activityIndicator = [[UIActivityIndicatorView alloc] init];
activityIndicator.color = [UIColor blackColor];
activityIndicator.backgroundColor = [UIColor blackColor];
[activityIndicator startAnimating];
[self.view addSubview:activityIndicator];
activityIndicator.center = CGPointMake(self.view.bounds.size.width / 2, self.view.bounds.size.height / 2 );
NSURL *url = [NSURL URLWithString:urlAsString];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
operation.responseSerializer = [AFJSONResponseSerializer serializer];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    self.moviesArray = [responseObject valueForKeyPath:@"data.items"];
    NSLog(@"%@", moviesArray);
    self.thumbnailsArray = [responseObject valueForKeyPath:@"data.items.thumbnail"];
    self.moviesDetailArray = [responseObject valueForKeyPath:@"data.items"];
    [activityIndicator setHidden:YES];
    [activityIndicator stopAnimating];

    [self.collectionView reloadData];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", error);
    UIAlertView *alertView =[[UIAlertView alloc] initWithTitle:@"Error" message:[NSString stringWithFormat:@"%@", error.localizedDescription] delegate:self cancelButtonTitle:@"OK" otherButtonTitles:@"Try again", nil];
    [activityIndicator setHidden:YES];
    [activityIndicator stopAnimating];      
    [alertView show];           
    }];
[operation start];
}

您是否尝试过将操作添加到AFHTTPRequestOperationManager?管理器具有 operationQueue 属性。您可以从那里取消操作。

操作

失败时,从共享管理器停止操作。

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager.operationQueue cancelAllOperations];

编辑:如果要查找特定操作,可以循环访问队列中的操作:

for (NSOperation *operation in manager.operationQueue.operations) {
    // check if this is the right operation, and cancel it.
}

尝试将

[operation cancel];

在故障块中

最新更新