Я являюсь любопытным новичком в области разработки iOS. Я загружаю информацию из вызова API, и во время загрузки я хочу показать «загрузочный счетчик».Показание загрузки spinner на другую тему
Все работает, но я получаю это предупреждение на журнал: «Получение веб-замок из потока, отличного от основного потока или веб-нить UIKit не должен вызываться из вторичного потока.»
Это мой код:
UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
spinner.center = CGPointMake(160, 150);
spinner.hidesWhenStopped = YES;
[self.view addSubview:spinner];
[spinner startAnimating];
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
dispatch_queue_t downloadQueue = dispatch_queue_create("downloader", NULL);
dispatch_async(downloadQueue, ^{
NSString *url = [NSString stringWithFormat:@"https://www.***********?q=%@",[self.searchBar.text urlEncode:NSUTF8StringEncoding]];
NSURL *googleURL = [NSURL URLWithString:url];
NSData *jsonData = [NSData dataWithContentsOfURL:googleURL];
NSError *error = nil;
NSDictionary *dataDict = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];
for (NSDictionary *items in [dataDict objectForKey:@"items"]) {
Book *book = [Book bookWithTitle:[[items objectForKey:@"volumeInfo"] objectForKey:@"title"]];
book.authors = [[[items objectForKey:@"volumeInfo"] objectForKey:@"authors"] objectAtIndex:(0)];
[self.rowsInSection addObject:book];
}
dispatch_async(dispatch_get_main_queue(), ^{
[spinner stopAnimating];
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
[[self myTableView]reloadData];
[self.view endEditing:YES];
});
});
Я попытался переключить два потока, но это не сработало. Любая идея?
Спасибо! А.
EDIT:
Я решил предупреждение. В основном это происходило, потому что я обращался к «self.searchBar.text» внутри другого потока. Чтобы решить эту проблему, я использовал локальную переменную, чтобы ее сохранить, а затем использовать эту переменную в потоке. Это все еще немного сбивает меня с толку, но по крайней мере у меня нет никаких ошибок или предупреждений.
Спасибо всем за комментарии/ответы и помощь!
А.
предупреждение не следует принимать слишком легкомысленно, но, скорее всего, он никогда не будет реальной проблемой. Если вас это беспокоит, вы всегда можете использовать NSAutoReleasePool и NSThread. – ApolloSoftware
Спасибо! Я посмотрю на них. – Andrea
Что такое 'self.rowsInSection'? –