2009-03-04 4 views
0

Я пытаюсь отобразить UIActivityIndicatorView во время фоновой обработки. Приведенный ниже упрощенный код работает, когда я пытаюсь его использовать в симуляторе (отображается предупреждение). Но когда я загружаю его на свой телефон из Xcode, фоновый поток, похоже, вообще не вызван. (предупреждение никогда не отображается)
Любые идеи?Threading работает в симуляторе, но не на 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 вместо обработки необработанного потока. Он абстрагирует всевозможные вещи для вас (приоритет, autoreleasepools и т. Д.). ? Вы можете просто добавить своего делегата в подкласс NSOperation, чтобы получить обратный вызов, когда вам нужно.

0

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

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

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

+0

вам следует обновить свой вопрос с помощью этой информации, вместо того, чтобы помещать ее в ответ, чтобы другие не пытались ответить. –

+0

сделано. Извините, новичок ошибка – 2009-03-04 23:47:18

+0

как отметил Кристофер, вы можете обновить исходный вопрос _and_ удалить этот ответ. –