Threading работает в симуляторе, но не на iPhone - PullRequest
0 голосов
/ 04 марта 2009

Я пытаюсь отобразить UIActivityIndicatorView во время фоновой обработки. Приведенный ниже упрощенный код работает, когда я пробую его в симуляторе (отображается предупреждение) ... но когда я загружаю его на свой телефон из 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];    
}

Ответы [ 3 ]

1 голос
/ 05 марта 2009

Используйте NSOperation вместо необработанных манипуляций с потоками. Он абстрагирует все виды вещей для вас (приоритет, autoreleasepools и т. Д ...). ? Вы можете просто добавить своего рода делегата в свой подкласс NSOperation, чтобы получить обратный вызов, когда вам нужно.

1 голос
/ 05 марта 2009

Вы пробовали очистить свой билд? Я только что запустил ваш код на моем устройстве и симуляторе, и он работает, как и ожидалось, в обоих случаях

0 голосов
/ 05 марта 2009

Спасибо за быстрый ответ!

Оказалось, что проблема не в этом фрагменте кода вообще. Я выполнял этот код в зависимости от значения в цепочке для ключей. В то время как у цепочки для ключей моего симулятора есть это значение, у моего тестового iphone не было этого значения.

Чувствую себя так глупо, что беспокою всех вас. Но продолжение ответа от nduplessis помогло мне сузить проблему.

...