ios - NSOperation 等待依赖项完成成功 block

标签 ios afnetworking nsoperation nsoperationqueue

我在这个例子中使用了 AFNetworking,但我认为它更适合 NSOperation。我有两个操作,一个是依赖另一个整理。然而,在 op1 的成功 block 完全运行之前,op2 真的不应该运行。对于操作队列中的依赖项,op2 将在 op1 完成后立即运行,但在 op1 的成功 block 完成之前。

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSURLRequest *request = [manager.requestSerializer requestWithMethod:@"GET" URLString:url parameters: nil error: nil];
NSOperation *op1 = [http.manager HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation *operation, id userLocations) {
   NSLog(@"Success");
   // do some stuff 

   // more stuf

   // I am done, ready for the next operation.
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
   NSLog(@"Error: %@", error);
}];
NSOperation* op2 = // create op, this will depend on op1 finishing
[op2 addDependency:Op1];  // op2 is dependent on op1 finishing

[manager.operationQueue addOperations:@[op1, op2] waitUntilFinished:NO];

这对我来说不太适用,因为 op2 依赖于 op1 的成功 block 中设置的某些内容。这意味着 op2 在 op1 完成其成功 block 之前无法启动。

NSOperations 是否有办法将它们排入队列,以便每个 block 都可以等到 block 也完成运行?如果不是,我该如何重新设计以实现这种依赖性。

最佳答案

我会以不同的方式构建事物,在第一个操作中设置第二个操作。像这样:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSURLRequest *request = [manager.requestSerializer requestWithMethod:@"GET" URLString:url parameters: nil error: nil];
NSOperation *op1 = [manager HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation *operation, id userLocations) {
    NSLog(@"Success");
    // do some stuff

    // more stuf

    // I am done, ready for the next operation.
    // SO put the other operation here!
    NSOperation* op2 = // create op, this will depend on op1 finishing

    [manager.operationQueue addOperation:op2];

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", error);
}];
[manager.operationQueue addOperation:op1];

关于ios - NSOperation 等待依赖项完成成功 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25457550/

相关文章:

ios - 使用 Basic Auth 的 AFNetworking 请求最初有效,但几分钟后失败

ios - iOS-AFNetworking GET方法中不兼容的 block 指针类型

ios - AFNetworking - 重试直到 API 正确响应

iphone - 主线程在等待 NSOperationQueue 操作取消时无限期挂起 [仅在设备上!]

ios - 使用图像缓存时展开 [String] 的问题

iOS 构建成功但归档失败

ios - 为什么 `viewWillAppear` 将 `animated` 设置为 true,即使在呈现 `present(_, animated: false, _)` 时也是如此?

ios - 处理后台任务的更改请求

objective-c - 用于核心数据操作的 NSOperation

iphone - iOS 中的 NSNetServices