NSURLConnection sendAsynchronousRequest在某些刷新请求中未命中完成处理程序

时间:2013-06-11 02:27:49

标签: ios objective-c nsurlconnection uirefreshcontrol sendasynchronousrequest

我有这个代码块:

    +(void)requestPath:(NSString *)path onCompletion:(RequestCompletionHandler)complete
{
    // Background Queue
    NSOperationQueue *backgroundQueue = [[NSOperationQueue alloc] init];

    // URL Request
    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:path]
                                                  cachePolicy:NSURLCacheStorageAllowedInMemoryOnly
                                              timeoutInterval:10];

    // Send Request
    [NSURLConnection sendAsynchronousRequest:request
                                       queue:backgroundQueue
                           completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){
                               NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                               if (complete) complete(result,error);
                           }];


}

此代码用于为我的应用程序提取数据,99%的时间我都没有问题。但是,有时(但不总是)在UIRefreshControl刷新请求中,NSURLConnection中的完成处理程序sendAsynchronousRequest未被命中,这会导致我的应用程序崩溃。

我可能会请求相同的数据,有时会触发完成处理程序,但有时刷新它将无效。

我不确定为什么会这样。

非常感谢任何帮助。

谢谢!

1 个答案:

答案 0 :(得分:0)

正确处理错误案例

 [NSURLConnection sendAsynchronousRequest:request
                                       queue:backgroundQueue
                           completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){
                               if (error)
                               {
                                   NSLog(@"%@",[error localizedDescription]);

                               }
                               else
                               {
                                   NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                                   //if (complete) complete(result,error);
                               }

                           }];