Как внедрить загрузчик, пока выполняется работа?

#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