0

Я пытаюсь написать немного кода, который проверяет URL-адрес источника данных, а затем заполняет массив объектами из этого URL-адреса. Он действительно работает хорошо, но если есть проблема с веб-соединением или адресом, я хочу заполнить массив данными из связанного файла. Проблема, с которой я сталкиваюсь, заключается в том, что метод connection didFailWithError никогда не вызывается. Я пробовал простую строку, но она не звонит. Я хочу, чтобы приложение по-прежнему функционировало для людей, которые используют iPod touch или находятся в режиме полета.NSURLConnection не звонит сделалFailWithError.

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]); } 

- (Недействительными) соединение: (NSURLConnection *) подключение didFailWithError: (NSError *) Ошибка {

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

- (Недействительными) соединение: (NSURLConnection *) подключение didReceiveResponse: (NSURLResponse *) response { listConnectFail = NO; NSLog (соединение «Успешно завершено, заполняется из API»); }

Я знаю, что это, вероятно, что-то глупо, что я не вижу, но я мог бы использовать помощь, чтобы понять, что я не

Спасибо заранее!

ответ

0

Как вы подтвердили, что ваш делегат не получил сообщение? Вы проверили журнал?

Ваш код, похоже, предполагает, что «listConnectFail» будет установлен сразу после завершения инициализации NSURLConnection, что не обязательно так.

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

Документация NSURLConnection гласит, что «делегат получит сообщения делегатов по мере продвижения нагрузки».

Однако я не уверен в режиме самолета, возможно, эта конкретная ошибка может быть обнаружена синхронно.

+0

Журнал не дает мне много информации. Если я дам ему неправильный URL, он сидит в ожидании без сообщений в течение нескольких секунд, пока, наконец, не сломается и не отбросит «SIGABRT» – Tenthrow