我想在currentQueue上运行下面显示的AFURLConnectionOperation,因为我想让我的主线程空闲以进行用户插入,但是当我调用mainQeue时什么也没发生。

但是,如果我在mainQueue上调用相同的AFURLConnectionOperation,它会完美地工作。

请看下面的代码

// Send Batch
        NSArray *operations = [AFURLConnectionOperation batchOfRequestOperations:mutableOperations progressBlock:^(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations) {
            NSLog(@"%lu of %lu complete", (unsigned long)numberOfFinishedOperations, (unsigned long)totalNumberOfOperations);
        } completionBlock:^(NSArray *operations) {
            // check batch response
            NSError *error;
            for (AFHTTPRequestOperation *op in operations) {
                if (op.isCancelled){
                    return ;
                }
                if (op.responseObject){
                    // Current JSON Batch complete
                    NSMutableArray *jsonObject = [NSJSONSerialization JSONObjectWithData:op.request.HTTPBody options:kNilOptions error:&error];
                    // Update sent_flag using current chunk
                    [[SyncModel sharedInstance] updateSentFlag:jsonObject];
                }
                if (op.error){
                    error = op.error;
                    NSLog(@"Error == %@", error);
                }
            }
        }];

然后最后我调用以下代码之一
[[NSOperationQueue mainQueue] addOperations:operations waitUntilFinished:NO]; // this works
[[NSOperationQueue currentQueue] addOperations:operations waitUntilFinished:NO]; // this dose not work

最佳答案

原因是

您可以从正在运行的操作对象中使用此方法,以获取对启动它的操作队列的引用。从正在运行的操作的上下文外部调用此方法通常会导致返回nil。

所以,我想,如果您登录[NSOperationQueue currentQueue],它为nil

如果您想要一个新队列,请使用

[[NSOperationQueue alloc] init];

10-02 13:14