Обновление пользовательского интерфейса при использовании stringWithContentsofurl - PullRequest
1 голос
/ 10 августа 2011

Я использую stringWithcontentsofurl для загрузки некоторых строк с моего веб-сервера в приложение, но я хотел бы обновить пользовательский интерфейс, чтобы показать загрузчик некоторого вида.Я загружаю несколько строк (иногда их может быть до 100), поэтому пользователю было бы удобно показать что-то, чтобы они знали, что приложение не падает, потому что теперь пользовательский интерфейс завис, я не могу показатьUILoader или что-то в этом роде.Есть ли возможность сделать это?Или, может быть, альтернатива stringWithcontentsofurl, где это возможно?

привет, Эрик

Ответы [ 4 ]

3 голосов
/ 15 мая 2013

Попробуй это. Он загружает вещи в фоновом режиме. Если позднее пользовательский интерфейс обновляется (в asyncload), обязательно сделайте это в главном потоке.

-(void)loadappdetails:(NSString*)appid {
    NSString* searchurl = [@"https://itunes.apple.com/lookup?id=" stringByAppendingString:appid];

    [self performSelectorInBackground:@selector(asyncload:) withObject:searchurl];

}
-(void)asyncload:(NSString*)searchurl {
    NSURL* url = [NSURL URLWithString:searchurl];
    NSError* error = nil;
    NSString* str = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];
    if (error != nil) {
        NSLog(@"Error: %@", error);
    }
    NSLog(@"str: %@", str);
}
0 голосов
/ 10 августа 2011

Это классический чехол для «Ленивая загрузка».См. Пример кода Apple:

http://developer.apple.com/library/ios/#samplecode/LazyTableImages/Introduction/Intro.html

Должно быть легко заменить "строки" на "изображения", когда вы читаете этот код.

Вы хотите отобразитьзаполнитель в метке, такой как «(извлечение информации)» или аналогичный, и затем загрузка информации в фоновом режиме, либо сам по себе извлекает извлечения (асинхронное извлечение), либо использует библиотеку, подобную ASIHTTPRequest, которая обрабатывает все асинхронные гайки и болты, вызываяМетод делегата после завершения выборки.

0 голосов
/ 03 мая 2012

Чтобы сделать этот метод асинхронным, можно и рекомендуется использовать Grand Central Dispatch.Если кому-то будет интересно, я покажу несколько строк кода для этого.

0 голосов
/ 10 августа 2011

К сожалению, stringWithContentsOfURL - это синхронный метод, то есть он заблокирует ваш поток, и вы не получите никаких обратных вызовов во время его работы. Это также плохо для пользовательского опыта.

Альтернативой может быть использование NSURLConnection для ручной настройки собственного запроса и использование методов делегата вашего соединения для отображения какого-либо индикатора выполнения. В частности, вы захотите использовать connection:didReceiveData: и connectionDidFinishLoading:

Как только все данные будут получены, используйте следующую строку для получения вашей строки.

NSString *theString = [[NSString alloc] initWithData:yourData encoding:UTF8StringEncoding];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...