2009-03-04 19 views
0

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

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

また、マルチスレッドの場合は、NSOperationとNSOperationQueueを調べる価値があります。実際にあなたの人生はずっと楽になります – nduplessis

答えて

1

ビルドのクリーニングを試しましたか?私はちょうど私のデバイスとシミュレータであなたのコードを実行し、両方の場合に期待どおりに動作します

1

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

0

すばやく返信いただきありがとうございます。

このコードの問題ではないことが判明しました。私はこのコードをキーチェーンの値に応じて実行していました。私のシミュレータのキーチェーンはその価値を持っていますが、私のテスト用のiphoneはこの価値を持っていませんでした。

あなたのすべてを悩ますためにとても愚かであると感じてください。しかし、nduplessisからの返信をフォローアップすることは、私が問題を絞り込むのに役立ちました。

+0

あなたはこの情報を回答に入れるのではなく、あなたの質問を更新する必要があります。 –

+0

が完了しました。申し訳ありません初心者の間違い –

+0

クリストファーが指摘したように、あなたは元の質問を更新することができます_and_この答えを削除します。 –

関連する問題