通过线程调用函数给出异常

时间:2013-04-17 06:42:56

标签: ios objective-c nsthread

我正在使用该线程来调用我的函数“initialGetMethod”

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

我的get方法是

-(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];
}

但它给出异常“试图从主线程或网络线程以外的线程获取Web锁。这可能是从辅助线程调用UIKit的结果。”

在“[self.loginPassword setAlertViewStyle:UIAlertViewStyleLoginAndPasswordInput]”中给出异常;“

如果我将该函数称为“[self initialGetMethod];”它没有给出例外,但需要一些时间..

我尝试在后台加载,但它不起作用..(意思是我不希望它在后台)..

请提出一些解决方案..

2 个答案:

答案 0 :(得分:2)

在运行应用程序期间遇到的错误是

“试图从主线程或网络线程以外的线程获取Web锁定。这可能是从辅助线程调用UIKit的结果。”

一旦您更新或访问除MainThread之外的任何其他线程中的UI元素(仅使用主线程访问或更新UI,它只会帮助您)

这里显示了后台线程中的警报,这就是它发生的原因

请使用以下其中一项进行PopUp提示

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

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

答案 1 :(得分:-1)

 //call createthread:

    [self setupTimerThread:];



       //write following code in setupTimerThread
       timer = [NSTimer timerWithTimeInterval:02
                                        target:self
                                      selector:@selector(initialGetMethod:)
                                      userInfo:nil
                                       repeats:NO];
       NSRunLoop* runLoop = [NSRunLoop currentRunLoop];
       [runLoop addTimer:timer forMode:NSRunLoopCommonModes];
       [runLoop run];