NSURLConnection 没有调用 didFailWithError。

Posted

技术标签:

【中文标题】NSURLConnection 没有调用 didFailWithError。【英文标题】:NSURLConnection is not calling didFailWithError. 【发布时间】:2012-04-10 19:54:40 【问题描述】:

我正在尝试编写一些代码来检查数据源的 URL,然后使用来自该 URL 的对象填充数组。它实际上运行良好,但如果网络连接或地址出现问题,我想用捆绑文件中的数据填充数组。我遇到的问题是永远不会调用 connection didFailWithError 方法。我尝试传递一个简单的字符串,但它没有调用。我希望该应用程序仍然适用于使用 ipod touch 或处于飞行模式的人。

connection didReceiveResponse 工作正常。

这就是我正在使用的。

- (void)loadListData
NSLog(@"Loading data from sources");

NSURLRequest *listURLRequest = [NSURLRequest requestWithURL:integerPhoneListURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:1.0];
[[NSURLConnection alloc] initWithRequest:listURLRequest delegate:self];

  if (!listConnectFail)
        phoneListJSON =[NSData dataWithContentsOfURL:integerPhoneListURL];
        [self performSelectorOnMainThread:@selector(fetchedData:) withObject:phoneListJSON waitUntilDone:YES];


     else 
        //This will tell us if there is an error loading the file
        NSLog(@"File not found on web init from file");
        phoneListJSON =[NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"contactlist" ofType:@"json"]];
        [self performSelectorOnMainThread:@selector(fetchedData:) withObject:phoneListJSON waitUntilDone:YES];
    



//Initialize the filtered list with array of customer objects. Based on original data
filteredList = [[NSMutableArray alloc] init];

for (NSDictionary *dict in phoneListOriginal) 
    contact *single = [[contact alloc] init];
    single.fName = [dict objectForKey:@"fName"];
    single.lName = [dict objectForKey:@"lName"];
    single.extension = [dict objectForKey:@"extension"];
    single.title = [dict objectForKey:@"title"];
    single.department = [dict objectForKey:@"department"];
    single.cellNumber = [dict objectForKey:@"cellNumber"];
    //NSLog(@"%@", single.lName);
    [filteredList addObject:single];



NSLog(@"Array filteredLIst contains %d records",[filteredList count]); 

-(void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error

listConnectFail = YES; 
NSLog(@"Connection Failed, pulling from file"); 

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 列表连接失败 = 否; NSLog(@"连接成功,从 API 填充");

我知道这可能是我没有看到的愚蠢的东西,但我可以使用帮助来查看我没有看到的东西

提前致谢!

【问题讨论】:

【参考方案1】:

您如何确认您的代表没有收到消息?你检查过日志吗?

您的代码似乎假设在 NSURLConnection 的初始化完成后会立即设置“listConnectFail”,但情况并非如此。

[[NSURLConnection alloc] initWithRequest:listURLRequest delegate:self];
if (!listConnectFail)...

NSURLConnection 文档声明“代理将在加载过程中接收代理消息。”

但是,我不确定飞行模式,也许可以同步检测到这个特殊错误。

【讨论】:

日志没有给我太多信息。如果我给它错误的 URL,它会等待几秒钟没有消息,直到最终中断并返回 SIGABRT

以上是关于NSURLConnection 没有调用 didFailWithError。的主要内容,如果未能解决你的问题,请参考以下文章

何时取消 uinavigationcontroller 中的 nsurlconnection

NSURLConnection(作为 AFNetworking 的一部分)不调用 NSURLConnectionDataDelegate 委托

有啥方法可以强制异步 NSURLConnection 在后台调用 connectionDidFinishLoading 吗?

带有异步NSURLConnection调用的MBProgressHUD

iPhone NSURLConnection:connectionDidFinishLoading - 如何将字符串返回给调用方法

NSURLConnection 启动 + 自动释放