Многопоточность и JSON / NSURLConnection на iPhone - PullRequest
0 голосов
/ 27 июня 2011

Я пишу приложение, которое использует многопоточность и кеш.Очень похоже на пример кода Apple TopSongs .После запуска мне нужно получить значение объекта в фиде JSON.

Теперь я боюсь, что это нарушит рабочий процесс приложения и заблокирует поток или что-то еще, если я использую NSURLConnection.Могу ли я просто загрузить этот канал JSON (он имеет только один объект) без использования методов делегата NSURLConnection?Если я реализую методы делегата в моем файле делегата, то приложение завершит работу с методом applicationDidFinishLaunching:application, а затем перейдет к

connection:didReceiveResponse:
connection:didReceiveData:
connection:didFailWithError:
connectionDidFinishLoading:

Как мне избежать этого?Мне нужно получить метку времени (хранящуюся в этом файле JSON) в самом начале applicationDidFinishLaunching:application, поскольку остальная часть этого метода зависит от этой метки времени.

Спасибо,

Ответы [ 2 ]

2 голосов
/ 27 июня 2011

Для этого есть два способа:

Использовать sendSynchronousRequest NSURLConnection, но он будет блокироваться до получения ответа

+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error

или ( предпочтительный вариант )

Переместить код, который использует JSON, в отдельный метод.Используйте асинхронные + делегированные методы NSURLConnection как обычно, но в вашем applicationDidFinishLaunching отображении метода своего рода HUD , чтобы информировать пользователя о том, что происходит, а затем в соединении : didReceiveResponse метод или метод connectionDidFinishLoading вызывает ваш новый метод, который опирается на JSON ( и теперь будет иметь JSON ) и удаляет HUD.

0 голосов
/ 27 июня 2011

Я не уверен, что понимаю, что вы имеете в виду, когда говорите "приложение завершит работу приложенияDidFinishLaunching, а затем перейдите к

connection:didReceiveResponse: connection:didReceiveData: connection:didFailWithError: connectionDidFinishLoading:"

Не могли бы вы объяснить это немного подробнее??

Что касается вопроса о методе в зависимости от отметки времени, которую вам нужно получить из файла JSON, я бы посоветовал вам пересмотреть дизайн приложения и то, что вы делаете в своих методах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...