#objective-c #json #ios7 #xcode5 #loader
#objective-c #json #ios7 #xcode5 #загрузчик
Вопрос:
Я новичок в разработке ios. Мне нужно вызвать api для извлечения информации из Интернета, в контроллере 2 я вызываю свой API для отображения информации из Интернета, а из действия кнопки контроллера 1 я вызываю контроллер 2. Я внедрил пользовательский загрузчик в представлении контроллера 2, метод load во время обработки, но я не знаю, почему требуется так много времени для перехода к контроллеру 2 с контроллера 1, и я не знаю, как сократить это время обработки, или, пожалуйста, скажите, могу ли я внедрить загрузчик во время обработки действия кнопки. нужна помощь.
для вызова api-
NSURLRequest *theRequest=[NSURLRequest requestWithURL:getAllClassifications cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];
NSData *returnData = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:nil error:nil];
// NSLog(@"return id =%@",returnData);
NSError* error;
NSDictionary* json = [NSJSONSerialization
JSONObjectWithData:returnData
options:kNilOptions
error:amp;error];
//NSDictionary *location = [json objectForKey:@"npidata"];
NSArray *latestLoans = [json objectForKey:@"taxonomy"];
recipes = [latestLoans valueForKey:@"classification"];
firstname = [latestLoans valueForKey:@"classification"];
для реализации пользовательского загрузчика-
NSURL *url = [[NSBundle mainBundle] URLForResource:@"loadingg" withExtension:@"gif"];
self.loader.image = [UIImage animatedImageWithAnimatedGIFData:[NSData dataWithContentsOfURL:url]];
float progress = 0.0f;
while (progress < 1.0f) {
progress = 0.01f;
HUD.progress = progress;
usleep(50000);
}
[NSTimer scheduledTimerWithTimeInterval:progress target:self selector:@selector(abcd) userInfo:nil repeats:NO];
Комментарии:
1. Пожалуйста, включите свой код. Вероятно, вы выполняете сетевые операции в главном потоке.
Ответ №1:
@jrturton, похоже, все правильно, вы делаете NSURLConnection sendSynchronousRequest
, который остановится, пока не будут возвращены все данные. Вы обнаружите, что система более отзывчива, используя асинхронный запрос.
NSURLConnection *c = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self startImmediately: true];
Затем он немедленно возвращается в ваш код до того, как данные будут готовы. позже он обратится к методам делегирования, которые вы также должны определить, чтобы предоставлять вам данные по мере их поступления. На есть простое руководствоhttp://codewithchris.com/tutorial-how-to-use-ios-nsurlconnection-by-example / и подробные сведения в документации Apple