2013-06-02 3 views
-3
NSString *jsonPath = [[NSBundle mainBundle] pathForResource:@"CRN_JSON" 
                ofType:@"json"]; 


dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    data = [NSData dataWithContentsOfURL: 
        [NSURL URLWithString:@"http://properfrattire.com/Classifi/CRN_JSON.json"]]; 
    [self performSelectorOnMainThread:@selector(fetchedData:) 
          withObject:data waitUntilDone:YES]; 

}); 

Моя переменная данных равна нулю после запуска этого кода. Если вы перейдете по ссылке, вы увидите, что это файл JSON. Я запустил эту функцию с таким же файлом локально, но не смог получить данные по указанному URL без ошибок.NSData dataWithContentsOfURL: return nil

+1

Это не значит, что есть ошибка. Просто вы ожидаете, что асинхронный вызов будет вести себя так, как если бы он был синхронным. –

+0

Можете ли вы объяснить, что вы подразумеваете под этим? –

+0

Вы ожидаете, что последовательность команд в блоке, переданном dispatch_async, будет выполнена в порядке и будет завершена после возвращения функции. Однако, поскольку это ** async, ** это не произойдет - функция вернется до завершения работы блока. Что не очевидно в этом? Разве вы не читали документацию для 'dispatch_async()'? –

ответ

2

Не уверен, почему вы вложенности вызовов URLWithString:

[NSURL URLWithString:[NSURL URLWithString:@"http://properfrattire.com/Classifi/CRN_JSON.json"]]]; 

Когда будет делать:

[NSURL URLWithString:@"http://properfrattire.com/Classifi/CRN_JSON.json"]; 

Кроме того, вы должны использовать dataWithContentsOfURL:options:error: так что вы можете увидеть любую ошибку.

+0

Извините, но я просто набрал его здесь неправильно, что у меня на самом деле есть, но он все еще не работает. –

+1

@BryceLanglotz IT важно вставить код REAL при задании вопроса. Ввод текста в поддельных кодах гораздо труднее найти проблему. – rmaddy

Смежные вопросы