#objective-c #nsstring #uitextview #nsurl #wikipedia
#objective-c #nsstring #uitextview #nsurl #википедия
Вопрос:
Теперь у меня проблема. Я хочу получить данные Википедии с помощью wikimeta. Я получаю данные с помощью метода NSString (stringWithContentsOfURL:encoding:error:). Но иногда, когда соединение происходит очень медленно, я хочу отменить процесс получения данных URL. Но, когда я использую этот метод, я не могу остановить процесс, потому что мы не можем обнаружить какое-либо прикосновение к кнопке или к UIView. Кто-нибудь может помочь мне решить мою проблему? Любой способ получить данные из URL и установить их в UITextView, чтобы мы могли просматривать данные в UITextView.
Спасибо раньше. с уважением.
Ответ №1:
Если я правильно понимаю вашу проблему, вы не можете нажимать кнопки, потому что вы выполняете сетевое подключение к основному потоку, и это приводит к зависанию пользовательского интерфейса.
Правильный способ — выполнять длительные действия в фоновом потоке и выполнять операции пользовательского интерфейса только в основном потоке.
NSURLConnection предоставляет асинхронные методы, которые позволяют легко выполнять фактическую выборку данных с сервера в фоновом потоке. Вы можете прочитать о том, как использовать эти методы в ссылке на класс NSURLConnection
Однако концепция многопоточности чрезвычайно важна, и я бы настоятельно рекомендовал вам немного ознакомиться с ней, прежде чем начинать использовать асинхронные методы.
Вы можете прочитать полное руководство по документации Apple
После того, как вы изучите основные концепции, я рекомендую вам прочитать это руководство. Он использует ASIHTTPRequest, что является излишеством для начинающих, но объяснение концепций потоков там, на мой взгляд, очень хорошее.
Комментарии:
1. Было бы намного проще просто использовать асинхронные методы NSURLConnection для извлечения строки.
2. Возможно. Но многопоточность — это такая важная концепция, поэтому лучше изучить ее должным образом сейчас, а затем понять, как упростить вещи, и этот урок действительно образовательный. Он просто использует ASIHTTPRequest вместо NSURLConnection, но это та же концепция.
3. Да, но — если OP не знает об асинхронных вызовах, GCD будет большим скачком. Кроме того, асинхронные вызовы для NSURLConnection просты в использовании и в любом случае являются фоновыми. Итак, ваше предложение ASIHTTPRequest не делает этого лучше. ПОЦЕЛУЙ.
4. хорошо, я отредактировал свой ответ, чтобы включить NSURLConnection. Спасибо за комментарий @PaulLynch