У меня есть контроллер вида с метками, текстовыми полями, индикатором активности и кнопкой управления, все связаны с IBOutlets и доступны из моего кода.xcode viewcontroller скрывает поля, которые не работают
Когда пользователь нажимает кнопку, я скрываю несколько полей и выставляю индикатор активности. Затем я делаю синхронный URL-адрес, чтобы получить некоторые данные JSON.
Контроллер представления не обновляется, чтобы отражать индикатор активности и скрытые поля, пока ПОСЛЕ синхронного запроса не вернется. Мне нужно, чтобы это произошло до того, как запрос вернется, чтобы пользователи увидели, что что-то происходит.
Я попытался вставить спальный мешок (200000) ;, а также попытался [self.view setNeedsDisplay]; - - оба безрезультатно.
Можно ли каким-либо образом заставить обновление экрана ПЕРЕД блокированием синхронного вызова? Я знаю, что я могу пойти на вызов асинхронной, но я действительно не хочу, чтобы сделать это, так как я ничего не могу сделать в приложении пока/если я не получаю данные мне нужно ...
Спасибо, Джерри
вот код, который я использую для отправки запроса на синхронизацию: Это соответствующая часть подпрограммы «SendGetEventsRequest».
NSURLResponse *response = nil;
NSError *error = nil;
[self.aiActivityIndicator startAnimating];
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
Вот другие процедуры я использую перед выше процедура вызывается:
- (IBAction)btnGetEvents:(id)sender {
// The user presssed the GetEvents button. Send the requested server to be processed.
[self.aiActivityIndicator startAnimating];
[self.lblCollectingEventNames setHidden:NO];
[self.lblEnterServerName setHidden:YES];
[self.btnGetEvents setHidden:YES];
[self.tfServerName setHidden:YES];
[self.view setNeedsDisplay];
[self SendGetEventsRequest:self.tfServerName.text];
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField{
[self.tfServerName resignFirstResponder];
[self btnGetEvents:self];
return YES;
}
В основном, когда пользователь нажимает на кнопку «Пуск» на клавиатуре, процедура textFieldShouldReturn вызывается. Я увольняю клавиатуру, затем моделирую нажатие кнопки «Получить события».
В btnGetEvents я запускаю индикатор активности, скрываю/показываю несколько полей, а затем вызываю sendGetEventsRequest. В коде есть код, где я выполняю вызов Sync.
Я настраиваю индикатор активности и отображаю/скрываю поля перед вызовом синхронизации, но они не обновляются до тех пор, пока не вернется вызов синхронизации. Я считаю, что это связано с тем, что контроллер представления не выполнял перерисовку экрана до того, как вызов Sync был выполнен.
Итак, мне нужно выяснить, как получить экран для обновления перед вызовом Sync. Надеюсь, дополнительный код и дополнительное объяснение помогут.
Не могли бы вы загрузить код, который вы используете, чтобы позвонить и скрыть поля, спасибо –
Проверьте, есть ли http://stackoverflow.com/questions/15358602/self-view-setneedsdisplay-and-self-view- setneedslayout-are-not-working помогает вам. –
Отправьте код, в котором вы выполняете вызов синхронизации. Я думаю, что вы можете сделать вызов в потоке без интерфейса. –