2009-03-04 11 views
0

Ich versuche, eine UIActivityIndicatorView anzuzeigen, während Hintergrundverarbeitung stattfindet. Der unten vereinfachte Code funktioniert, wenn ich es im Simulator versuche (die Warnung wird angezeigt) .. aber wenn ich es von Xcode auf mein Telefon lade, wird der Hintergrund-Thread anscheinend überhaupt nicht aufgerufen. (die Warnung wird nie angezeigt)
Irgendwelche Ideen?Threading funktioniert im Simulator aber nicht auf dem 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

Auch für Multithreading lohnt es sich, in NSOperation und NSOperationQueue zu suchen. Es macht Ihr Leben wirklich viel einfacher – nduplessis

Antwort

1

Haben Sie versucht, Ihren Build zu reinigen? Ich habe gerade Ihren Code auf meinem Gerät und Simulator ausgeführt und es funktioniert in beiden Fällen wie erwartet

1

Verwenden Sie NSOperation anstelle von Raw-Thread-Manipulation. Es abstrahiert alle möglichen Dinge für Sie (Priorität, Autoreleasepools usw.). ? Sie können einfach eine Art Delegat zu Ihrer NSOperation-Unterklasse hinzufügen, um bei Bedarf einen Rückruf zu erhalten.

0

Danke für die Antwort so schnell!

Es stellte sich heraus, dass das Problem in diesem Code-Fragment überhaupt nicht war. Ich habe diesen Code abhängig von einem Wert im Schlüsselbund ausgeführt. Während der Schlüsselbund meines Simulators diesen Wert hat, hatte mein Test iphone diesen Wert nicht.

Fühlen Sie sich so albern, dass Sie alle beunruhigen. Aber nachdem ich die Antwort von nduplesis verfolgt hatte, konnte ich das Problem eingrenzen.

+0

Sie sollten Ihre Frage mit diesen Informationen aktualisieren, anstatt sie in eine Antwort zu schreiben, damit andere nicht antworten. –

+0

erledigt. Entschuldigung Neuling Fehler –

+0

wie Kristopher bemerkte, können Sie die ursprüngliche Frage _and_ aktualisieren diese Antwort zu aktualisieren. –

Verwandte Themen