2015-04-05 3 views
0

У меня есть контроллер вида с метками, текстовыми полями, индикатором активности и кнопкой управления, все связаны с 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. Надеюсь, дополнительный код и дополнительное объяснение помогут.

+1

Не могли бы вы загрузить код, который вы используете, чтобы позвонить и скрыть поля, спасибо –

+0

Проверьте, есть ли http://stackoverflow.com/questions/15358602/self-view-setneedsdisplay-and-self-view- setneedslayout-are-not-working помогает вам. –

+0

Отправьте код, в котором вы выполняете вызов синхронизации. Я думаю, что вы можете сделать вызов в потоке без интерфейса. –

ответ

0

Вау, я не могу поверить, что я единственный человек, у которого есть эта проблема. Я изменил свой код, чтобы использовать асинхронный вызов, и он работает отлично.

Смежные вопросы