2012-01-30 2 views
0

У меня странная вещь, которую я не понимаю. если я запустил метод [self setImage: [UIImage imageNamed: @ "Loader20.png"]] например. он отлично работает вне метода выбора нити, , но он не будет работать в самом селекторном методе, он просто ничего не делает. вот как я это делаю.вызов [NSThread detachNewThreadSelector ...] останавливает UIImageView setImage от работы

- (id)init { 
self = [super init]; 
if (self) { 

    //[self setImage:[UIImage imageNamed:@"Loader20.png"]]; 
    [NSThread detachNewThreadSelector:@selector(showLoadingImage) toTarget:self withObject:nil]; 

    } 
     return self; 
    } 


-(void)showLoadingImage{ 

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
int i = 0; 
int imageIncrement= 1; 
bool run = true; 
while (run){ 
    [NSThread sleepForTimeInterval:1]; 

    if(imageIncrement == 48){ 
     imageIncrement=1; 
     i++; 
    }else{ 
     imageIncrement++; 
    } 
    NSString *imageString = [NSString stringWithFormat:@"%@%d%@", @"Loader", imageIncrement, @".png"]; 
    NSLog(imageString); 

    [self setImage:[UIImage imageNamed:imageString]]; 
    if (i == 2){ 
     run = false; 
     [NSThread exit]; 
    } 

} 
[pool release]; 

} 

Может кто-нибудь дать мне несколько направлений, я уверен, все изображения, которые я хочу Переберите правильно назвал тестирование с NSLog, но все же изменением изображения оленьей кожи.

Заранее спасибо. Brett

ответ

0

Большинство UIKit не является потокобезопасным, поэтому вы должны назначить изображение на изображение в главном потоке (однако загрузка может быть выполнена в фоновом потоке).

0

UIKit просто работает в основной теме. Попробуйте загрузить изображение в виде NSData в потоке, а затем передать NSData в основной поток для использования как UIImage.

Смежные вопросы