Вызов функции через поток, дающий исключение

Я использую поток для вызова моей функции "initialGetMethod"

[NSThread detachNewThreadSelector:@selector(initialGetMethod) toTarget:self withObject:nil];

и мой метод получения

-(void) initialGetMethod
{
    self.loginPassword = [[ UIAlertView alloc] initWithTitle:@"Please Login to MFP" message:@"Enter Valid UserID and Password" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:@"Cancel", nil];
    [self.loginPassword setAlertViewStyle:UIAlertViewStyleLoginAndPasswordInput];
    [self.loginPassword setTag:2];
    [self.loginPassword show];
}

но это дает исключение «Пытался получить веб-блокировку из потока, отличного от основного потока или веб-потока. Это может быть результатом вызова UIKit из вторичного потока».

это дает исключение в «[self.loginPassword setAlertViewStyle: UIAlertViewStyleLoginAndPasswordInput];»

и если я вызываю функцию как «[self initialGetMethod];» это не исключение, но это займет некоторое время ..

Я пробовал загружаться в фоновом режиме, но он не работает .. (в смысле, я не хочу, чтобы он был в фоновом режиме) ..

пожалуйста, предложите какое-нибудь решение ..


person Raju    schedule 17.04.2013    source источник
comment
Вы не можете выполнять операции пользовательского интерфейса в фоновом потоке, зачем вы это пытаетесь?   -  person Gary    schedule 17.04.2013
comment
Почему это помечено iPhone-sdk-4.0? Надеюсь, вы не пытаетесь поддерживать iOS 4.0.   -  person rmaddy    schedule 17.04.2013
comment
я пробовал с [NSThread detachNewThreadSelector: @selector (initialGetMethod) toTarget: self withObject: nil]; но все равно получаю такое же исключение ..   -  person Raju    schedule 17.04.2013
comment
нет ... я использую iOS 4.3 ..   -  person Raju    schedule 17.04.2013


Ответы (2)


Ошибка, возникающая при запуске приложения:

«Пытался получить веб-блокировку из потока, отличного от основного потока или веб-потока. Это может быть результатом вызова UIKit из дополнительного потока».

что происходит, когда вы обновляете или получаете доступ к элементам пользовательского интерфейса в любом другом потоке, кроме MainThread (используйте основной поток только для доступа или обновления пользовательского интерфейса, это только поможет вам)

Здесь вы показываете оповещение в фоновом потоке, поэтому это происходит

Воспользуйтесь одним из следующих способов для оповещения о всплывающих окнах

  [self performSelector:@selector(initialGetMethod) withObject:nil];

  [self performSelector:@selector(initialGetMethod) withObject:nil afterDelay:0.1];
person iDhaval    schedule 17.04.2013

person    schedule
comment
Попробуйте мой отредактированный ответ. Он должен работать, если проблема связана с обновлением пользовательского интерфейса в фоновом режиме. - person Anil; 17.04.2013
comment
Попробуйте мой отредактированный ответ. Может быть, это сработает, если только runloop изменится, но поток останется неизменным. - person Anil; 17.04.2013
comment
Вы не можете запускать операции пользовательского интерфейса в фоновом потоке только в основном потоке, чтобы выполнять операции пользовательского интерфейса. Вот почему ваш код не работает: вы создаете новый поток и пытаетесь запустить на нем операции пользовательского интерфейса. Это не так. - person Popeye; 17.04.2013