NSURLConnection sendAsynchronousRequest没有得到响应

钱德勒·德·安吉利斯(Chandler De Angelis)

我有一个创建一个的方法NSURLRequest,并使用NSURLConnection方法发送该请求sendAsynchronousRequest:queue:compltionHandler:当我获取json文件或图像数据时,这很好用,但是当我尝试获取XML文档时,确实发生了一些奇怪的事情。该方法正在被调用,但是永远不会有响应,因此,永远不会调用完成处理程序。有谁知道如何解决这一问题?我已经使用了这种方法数百次,但是我从未见过这种现象。这是我打电话的方法sendAsynchronousRequest:queue:compltionHandler:

- (void)getCachedFile:(NSString *)title withCompletion:(void (^)(NSData *data))completion
{
    Reachability *reach = [Reachability reachabilityForInternetConnection];
    NetworkStatus status = [reach currentReachabilityStatus];
    if (status == NotReachable)
    {
        // read data locally
        NSError *error = nil;
        NSData *data = [NSData dataWithContentsOfFile:[self filePath:title]
                                              options:NSDataReadingUncached
                                                error:&error];
        if (error)
        {
            NSLog(@"COULD NOT READ LOCAL CACHED DATA: %@", error.localizedDescription);
        }
        else
        {
            completion(data);
        }
    }
    else
    {
        NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:title]
                                                 cachePolicy:NSURLRequestUseProtocolCachePolicy
                                             timeoutInterval:30.0f];

        // get data from NSURLCache
        NSCachedURLResponse *cachedResponse = [[NSURLCache sharedURLCache] cachedResponseForRequest:request];
        if (cachedResponse)
        {
            // if the data is found in the response, use it
            completion([cachedResponse data]);
        }
        else
        {
            // get the data from the server
            [NSURLConnection sendAsynchronousRequest:request
                                               queue:[NSOperationQueue currentQueue]
                                   completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
                                       if (connectionError)
                                       {
                                           NSLog(@"ERROR CONNECTING DATA FROM SERVER: %@", connectionError.localizedDescription);
                                       }
                                       else
                                       {
                                           [self.writingOperationQueue addOperationWithBlock:^{
                                          [[NSFileManager defaultManager] createFileAtPath:[self filePath:title]
                                                                                  contents:data
                                                                                attributes:nil];
                                           }];
                                           completion(data);
                                       }
                                   }];
        }
    }
}
冬青

一般注意事项:您的网络请求完成块正在捕获self这将导致保留周期。

^(NSURLResponse *response, NSData *data, NSError *connectionError) {
    if (connectionError)
    {
        NSLog(@"ERROR CONNECTING DATA FROM SERVER: %@", connectionError.localizedDescription);
    } else {
        [self.writingOperationQueue addOperationWithBlock:^{
            [[NSFileManager defaultManager] createFileAtPath:[self filePath:title]
                                                    contents:data
                                                  attributes:nil];
        }];
        completion(data);
    }
}

要修复它,您应该__weak MyClass *weakSelf = self;在块之前声明一个变量,并且只能在块内使用它。

您的特定问题可能与所调用的文档类型无关,而与所调用的线程有关。您正在上执行网络操作[NSOperationQueue currentQueue]如果这是系统队列,则可能在请求完成之前将其释放。您应该声明一个属性,NSOperationQueue并对其执行所有网络请求。

[NSURLConnection sendAsynchronousRequest:request
                                   queue:[NSOperationQueue currentQueue]
                       completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {...}];

应更改为:

[NSURLConnection sendAsynchronousRequest:request
                                   queue:self.networkOpQueue
                       completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {...}];

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

NSURLConnection sendAsynchronousRequest没有得到响应

来自分类Dev

Segue抛出NSInternalInconsistencyException,带有NSURLConnection sendAsynchronousRequest

来自分类Dev

iOS NSURLConnection(sendAsynchronousRequest :)缓存过多

来自分类Dev

等待直到NSURLConnection sendAsynchronousRequest完成

来自分类Dev

带有sendAsynchronousRequest Objective-C的NSURLConnection进度栏

来自分类Dev

如何取消[NSURLConnection sendAsynchronousRequest:..]发送的请求

来自分类Dev

NSURLConnection didReceiveData没有加载数据

来自分类Dev

没有得到响应改造2

来自分类Dev

没有得到套接字响应

来自分类Dev

NSURLConnection返回错误而不是响应401

来自分类Dev

来自NSURLConnection的NSData多部分响应

来自分类Dev

NSURLConnection响应返回500状态代码

来自分类Dev

从nsurlconnection委托方法返回响应数据

来自分类Dev

如何使用NSURLConnection的sendAsynchronousRequest方法分段接收数据?

来自分类Dev

iOS7 NSURLConnection sendAsynchronousRequest因POST数据失败

来自分类Dev

NSURLConnection sendAsynchronousRequest完成块是否在主线程上执行?

来自分类Dev

NSURLConnection延迟导致没有图片的UItableViewCell为空

来自分类Dev

Swift NSURLConnection没有名为start的成员

来自分类Dev

没有得到来自Guzzle的预期响应

来自分类Dev

在CURL Soap PHP中没有得到正确的响应

来自分类Dev

Angular Fire Auth后没有得到响应

来自分类Dev

Rxjava,Retrofit响应主体没有得到正确的答案?

来自分类Dev

在 swift HTTP 请求中没有得到完整的响应?

来自分类Dev

图像搜索 API bing Retrofit 没有得到响应

来自分类Dev

没有得到预期的 PHP cURL 响应

来自分类Dev

Curl得到POST响应,但是node.js没有得到POST响应

来自分类Dev

NSURLConnection-禁用身份验证质询响应机制

来自分类Dev

NSURLConnection即使在重置授权通知后仍返回缓存的响应

来自分类Dev

没有得到PHPASS

Related 相关文章

  1. 1

    NSURLConnection sendAsynchronousRequest没有得到响应

  2. 2

    Segue抛出NSInternalInconsistencyException,带有NSURLConnection sendAsynchronousRequest

  3. 3

    iOS NSURLConnection(sendAsynchronousRequest :)缓存过多

  4. 4

    等待直到NSURLConnection sendAsynchronousRequest完成

  5. 5

    带有sendAsynchronousRequest Objective-C的NSURLConnection进度栏

  6. 6

    如何取消[NSURLConnection sendAsynchronousRequest:..]发送的请求

  7. 7

    NSURLConnection didReceiveData没有加载数据

  8. 8

    没有得到响应改造2

  9. 9

    没有得到套接字响应

  10. 10

    NSURLConnection返回错误而不是响应401

  11. 11

    来自NSURLConnection的NSData多部分响应

  12. 12

    NSURLConnection响应返回500状态代码

  13. 13

    从nsurlconnection委托方法返回响应数据

  14. 14

    如何使用NSURLConnection的sendAsynchronousRequest方法分段接收数据?

  15. 15

    iOS7 NSURLConnection sendAsynchronousRequest因POST数据失败

  16. 16

    NSURLConnection sendAsynchronousRequest完成块是否在主线程上执行?

  17. 17

    NSURLConnection延迟导致没有图片的UItableViewCell为空

  18. 18

    Swift NSURLConnection没有名为start的成员

  19. 19

    没有得到来自Guzzle的预期响应

  20. 20

    在CURL Soap PHP中没有得到正确的响应

  21. 21

    Angular Fire Auth后没有得到响应

  22. 22

    Rxjava,Retrofit响应主体没有得到正确的答案?

  23. 23

    在 swift HTTP 请求中没有得到完整的响应?

  24. 24

    图像搜索 API bing Retrofit 没有得到响应

  25. 25

    没有得到预期的 PHP cURL 响应

  26. 26

    Curl得到POST响应,但是node.js没有得到POST响应

  27. 27

    NSURLConnection-禁用身份验证质询响应机制

  28. 28

    NSURLConnection即使在重置授权通知后仍返回缓存的响应

  29. 29

    没有得到PHPASS

热门标签

归档