setDelegate Queue不能在iOS5上运行,但在iOS 6上运行正常

时间:2013-01-15 11:26:03

标签: iphone ios nsurlconnection nsoperation nsoperationqueue

我正在尝试在后台线程中执行下载。为此,我创建了一个NSOperationQueue实例并向其添加了一个NSInvocationOperation实例。

        operationQueue = [NSOperationQueue new];
        // set maximum operations possible
        [operationQueue setMaxConcurrentOperationCount:1];

        NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self
                                                                                selector:@selector(startBackgroundThread:)
                                                                                  object:data];

        [operationQueue addOperation:operation];
        [operation release];

现在在startBackgroundThread中,我创建了一个新的NSURLConnection并将operationQueue分派给它。

    currentConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO];
    if (self.operationQueue) {
        [currentConnection setDelegateQueue:self.operationQueue];
    }        
    [currentConnection start];

iOS6中的行为

在iOS6上运行正常。 一个线程被创建,NSURLConnection回调它在同一个后台线程上委托。

iOS5和iOS5.1中的行为

创建了一个线程但是没有调用NSURLConnection委托。

我错过了iOS5中需要考虑的内容吗? 我已经阅读了Apple提供的文档,但没有提到与之相关的内容。

2 个答案:

答案 0 :(得分:1)

这是iOS 5上的已知问题。请参阅http://openradar.appspot.com/10529053

答案 1 :(得分:0)

如果您尝试执行后台Web请求,请使用以下便捷方法。

[NSURLConnection sendAsynchronousRequest: queue: completionHandler:];

阻止api提供更好的性能,并由apple推荐。