Как получить данные из Интернета и вставить их в UITextView?

#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