0

バックグラウンド処理中に UIActivityIndi​​catorView を表示しようとしています。以下の簡略化されたコードは、シミュレーターで試してみると機能します (アラートが表示されます)。しかし、Xcode から携帯電話にダウンロードすると、バックグラウンド スレッドがまったく呼び出されないようです。(アラートは表示されません)
何かアイデアはありますか?

 -(void)viewDidLoad {   
    [self performSelectorInBackground:@selector(runInAnotherThread) withObject:nil];

}

-(void) runInAnotherThread {
    NSAutoreleasePool *pool = [ [ NSAutoreleasePool alloc ] init ];
  int i;
    for(i=0;i < 1000 ;i ++){
        NSLog(@"INDEX = %d", i);
    }

    [self performSelectorOnMainThread : @ selector(backToMainThread ) withObject:nil waitUntilDone:NO]; 
    [ pool release ];
}

-(void) backToMainThread {

    UIAlertView *completeAlert = [[UIAlertView alloc] 
                     initWithTitle:@"Back to main "
                message: @"Success" 
                delegate:nil 
                cancelButtonTitle:@"OK" 
                otherButtonTitles:nil];
    [completeAlert show];
    [completeAlert release];    
}
4

3 に答える 3

1

生のスレッド操作の代わりに NSOperation を使用します。それはあなたのためにあらゆる種類のものを抽象化します(優先度、自動解放プールなど...)。? 何らかのデリゲートを NSOperation サブクラスに追加するだけで、必要なときにコールバックを取得できます。

于 2009-03-04T21:18:17.950 に答える
1

ビルドをクリーニングしてみましたか? デバイスとシミュレーターでコードを実行したところ、どちらの場合も期待どおりに動作します

于 2009-03-04T21:02:19.407 に答える
0

すぐに返信していただきありがとうございます。

問題はこのコード フラグメントにはまったくないことが判明しました。キーチェーンの値に依存してこのコードを実行していました。私のシミュレーターのキーチェーンにはその値がありますが、私のテスト iPhone にはこの値がありませんでした。

皆さんに迷惑をかけているなんて、ばかげていると思います。しかし、nduplessis からの返信をフォローアップすることで、問題を絞り込むことができました。

于 2009-03-04T21:37:34.860 に答える