setDelegateQueue 在 iOS5 上不工作,但在 iOS6 上工作正常

Posted

技术标签:

【中文标题】setDelegateQueue 在 iOS5 上不工作,但在 iOS6 上工作正常【英文标题】:setDelegateQueue is not working on iOS5 but working fine on iOS6 【发布时间】:2013-01-15 11:26:03 【问题描述】:

我正在尝试在后台线程中执行下载。为此,我创建了一个 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 提供的文档,但没有提到与此相关的内容。

【问题讨论】:

你想下载什么?是网页内容的图片吗? 如果在运行循环的线程上启动连接,则不会调用委托。 所以在主线程上启动连接,其运行循环将始终运行 @pradeepa :我正在下载网页内容,我使用了一个单独的线程,它有自己的运行循环来创建 NSURLConnection。问题是委托在 iOS6 中被调用,但在 iOS5.0 和 5.1 中没有 好的,您不必承担创建和管理线程的负担,请参阅我的答案中的 NSURLConnection api,它易于使用。系统将代表您创建所需数量的线程,并利用多核处理器。 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

[NSURLConnection sendAsynchronousRequest:队列:completionHandler:];

Block apis 提供更好的性能并被苹果推荐。

【讨论】:

谢谢....这个解决方案在 iOS5 和 iOS6 中都可以使用。但是我仍然对为什么 setDelegateQueue 不能在 iOS5 上工作而在 iOS6 上正常工作感到困惑

以上是关于setDelegateQueue 在 iOS5 上不工作,但在 iOS6 上工作正常的主要内容,如果未能解决你的问题,请参考以下文章

UINavigationController 有时在 iOS5 上缺少返回按钮

UITableView 错误访问在 dequeueReusableCellWithIdentifier 与 Storyboard (iOS5) 上崩溃

核心数据自动轻量级迁移在 ios5 上失败

使用 MPMoviePlayerController 和 iOS5 在 iPad 上没有音频,在模拟器中工作

在 iOS5/phonegap 上上传图片。字节数组/数据 URI 可能吗?

iOS5 中带有 indexPath 值的问题