0

スレッドを使用して関数「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スレッド以外のスレッドからWebロックを取得しようとしました。これは、セカンダリスレッドからUIKitを呼び出した結果である可能性があります。」

「[self.loginPassword setAlertViewStyle:UIAlertViewStyleLoginAndPasswordInput];」で例外を与える

関数を「[self initialGetMethod];」として呼び出すと、例外はありませんが、しばらく時間がかかります..

バックグラウンドでロードしようとしましたが、機能しません..(つまり、バックグラウンドにしたくないということです)..

いくつかの解決策を提案してください..

4

2 に答える 2

2

アプリケーションの実行中に発生するエラーは

「メイン スレッドまたは Web スレッド以外のスレッドから Web ロックを取得しようとしました。これは、セカンダリ スレッドから UIKit を呼び出した結果である可能性があります。」

これは、MainThread 以外の他のスレッドで UI 要素を更新またはアクセスすると発生します (メインスレッドを使用して UI にアクセスまたは更新するだけで役立ちます)

ここでは、Alert in Background スレッドが表示されているため、それが発生します

アラートをポップアップするには、次のいずれかを使用してください

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

  [self performSelector:@selector(initialGetMethod) withObject:nil afterDelay:0.1];
于 2013-04-17T06:52:04.407 に答える
-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];
于 2013-04-17T06:57:27.517 に答える